题目07:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
举例说明
输入 :前序遍历序列{ 1, 2, 4, 7, 3, 5, 6, 8}
和中序遍历序列{4, 7, 2, 1, 5, 3, 8,6}
重建出下所示的二叉树并输出它的头结点。
1 | 1 |
思路
整个的思路是:前序定根,中序分左右。
- 先序遍历序列的第一个数字是根结点值
- 中序遍历中根结点的左边序列是左子树,右边序列是右子树
解题是特别还需要处理不符合条件的情况:序列为空的情况;两序列元素个数不同的情况;两序列中元素不相同的情况。
步骤
- 前序第一个数是根,找到根
- 用根的value在中序遍历找到根(同一个),记下根在中序遍历的index
- 递归调用建立左右子树
代码实现
1 | public class _07 { |
输出:
1 | 4 7 2 1 5 3 8 6 |