题目:根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
![b60e40da7e5de6aacbe8af8dba1d240c.png](https://i-blog.csdnimg.cn/blog_migrate/689d607362a89e6fabbb5cb8cb99c914.png)
第一次遇到构造二叉树的题目,且根据前序和中序遍历的结果重构原树。也能想到递归构造左、右子树,但卡在了如何寻找左、右子树的范围,以及递归参数的选择。
解法一:递归法
前序遍历中首个节点必为根节点root,将inorder分成了左leftsubtree、右rightsubtree子树两部分;
分别进入左、右子树,preorder 中存储的为左子树的根节点,将leftsubtree继续分割。进而形成递归。
难点在于:
- 如何表示leftsubtree、rightsubtree ?
- 根节点的index索引如何设置?
直接看代码:
# Definition for a binary tree node.