#T0088. 求后序排列
0
求后序排列
题目背景
一棵二叉树的每个节点上都写着一个互不相同的编号(编号是 的一个排列)。有人分别记录了这棵树的先序遍历和中序遍历结果,但原始的树形结构丢失了。请你根据这两份记录,还原出它的后序遍历。
题目描述
给定一棵 个节点的二叉树:
- 节点编号为 且互不相同(每个编号恰好出现一次);
- 第二行给出先序遍历序列;
- 第三行给出中序遍历序列。
请输出后序遍历序列。保证两份序列来自同一棵合法二叉树。
输入格式
第一行一个整数 。
第二行 个整数,表示先序遍历。
第三行 个整数,表示中序遍历。
输出格式
一行 个整数,表示后序遍历,用空格分隔。
样例输入1
5
1 2 4 5 3
4 2 5 1 3
样例输出1
4 5 2 3 1
样例输入2
6
3 1 2 5 4 6
1 2 3 4 5 6
样例输出2
2 1 4 6 5 3
样例输入3(稍大,既有左子树也有右子树)
10
6 2 1 4 3 5 7 9 8 10
1 2 3 4 5 6 7 8 9 10
样例输出3
1 3 5 4 2 8 10 9 7 6
数据范围与约定
- 节点编号为 的一个排列
- 数据可能是退化成一条链的树,请注意递归深度
提示
先序的第一个数是根;在中序序列中找到根的位置,左边是左子树、右边是右子树,然后递归处理。可以先用数组记录每个编号在中序中的位置,把"找根"变成 ;树可能退化成链,递归层数可能达到 5000 层,有栈溢出风险时可以改用显式栈迭代实现。
冀公网安备13098402000493号