#J00243. T3 二叉树还原(rebuild)

0

T3 二叉树还原(rebuild)

T3 二叉树还原(rebuild)

题目描述

给定一棵有 nn 个节点的二叉树。节点编号为 1,2,…,n1,2,\dots,n,且每个节点的编号互不相同。

我们已经知道了这棵二叉树的先序遍历序列与中序遍历序列。请你据此求出它的后序遍历序列。

输入文件 rebuild.in,输出文件 rebuild.out。

输入格式

输入共三行。

第一行包含一个正整数 nn,表示节点个数。

第二行包含 nn 个互不相同的正整数,表示先序遍历序列。

第三行包含 nn 个互不相同的正整数,表示中序遍历序列。

保证给出的先序与中序序列能够唯一确定一棵二叉树。

输出格式

输出共一行,包含 nn 个用单个空格隔开的整数,表示后序遍历序列。

样例 1 输入

5
1 2 4 3 5
2 4 1 5 3

样例 1 输出

4 2 5 3 1

样例 1 解释

根据先序 1,2,4,3,51,2,4,3,5 与中序 2,4,1,5,32,4,1,5,3 可以还原出:

  • 根为 11;
  • 根 11 的左子树由 {2,4}\{2,4\} 构成,右子树由 {3,5}\{3,5\} 构成;
  • 左子树中根为 22,且 44 是 22 的右孩子;
  • 右子树中根为 33,且 55 是 33 的左孩子。

后序遍历(左、右、根)即为 4,2,5,3,14,2,5,3,1。

样例 2 输入

8
2 3 1 4 8 6 7 5
1 4 3 6 8 2 7 5

样例 2 输出

4 1 6 8 3 5 7 2

数据规模与约定

  • 对于 30%30\% 的数据,保证 n≤100n\le 100。
  • 对于另 30%30\% 的数据,保证 n≤10000n\le 10000。
  • 对于 100%100\% 的数据,保证 1≤n≤1051\le n\le 10^5,节点编号为 1∼n1\sim n 的一个排列。