题目描述:从前序与中序遍历序列构建二叉树
注意:你可以假设数中没有重复元素。
例如,给出:
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下二叉树:
思路分析:
1.遍历前序遍历的数组,每次拿到一个元素(root)之后再中序遍历的数组中找到对应的位置。
2.在中序遍历的数组中找到root之后
- root的左边将会是root的左子树
- root的右边将会是root的右子树
当我们拿到前序遍历的下一个数时,我们再接着区中序遍历中找到它的位置,然后它右边的将会时它的右子树,左边的将会是它的左子树(如果它的左边或者右边为空的话,说明它没有左子树或者右子树)……以此类推,这也就是我们熟悉的递归思想。
代码
class Solution {
//定义一个全局变量,如果把它放在方法参数里面,那么他是一个局部变量,如果进行递归的话,它最终还是会回到原来的值
public int index = 0;
//参数解释
//2.因为每次拿到前序遍历的数在中序遍历中找到之后,它的区间是发生改变的,所以需要一个区间
public TreeNode buildTreeChild(int[] preorder