题目描述:
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。例如,给出
前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:
3 / \ 9 20 / \ 15 7
在做这道题之前,我们要先清楚前序遍历、中序遍历与后序遍历的概念。
- 前序遍历:先遍历根节点,再遍历左子树,最后遍历右子树
- 中序遍历:先遍历左子树,再遍历根节点,最后遍历右子树
- 后序遍历:先遍历左子树,再遍历右子树,最后遍历根节点
清楚概念之后,我们可以先自己根据前序与中序序列构造二叉树试试看。
题目中给的前序序列为:3,9,20,15,7, 中序序列为:9,3,15,20,7
前序遍历的第一个元素一定就是根节点,在中序遍历中找到根节点的下标index,此时,index也代表的是根节点的左子树的个数。那么,从index开始,后面的元素就都是根节点的右子树。根据这一特点,我们可以写出来左子树的前序,中序以及右子树的前序中序序列。
int[] inleft = Arrays.copyOfRange(inorder,0,index); //左子树的中序序列
int[] preleft = Arrays.cop