根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
思路:
1、前序序列第一个是根
2、根据根在中序序列中找到
3、对左右子树做同样的操作(操作返回的结果就是根的左右孩子)
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {public TreeNode buildTree(int[] preorder, int[] inorder) {if(preorder.length==0)return null; TreeNode root = new TreeNode(preorder[0]);int num=0;for(int i =0; i<inorder.length; i++){if(inorder[i]==root.val){num=i;break;}}int[] preLeft = Arrays.copyOfRange(preorder,1,num+1);int[] preRight = Arrays.copyOfRange(preorder,num+1,preorder.length); int[] inoLeft = Arrays.copyOfRange(inorder,0,num);int[] inoRight = Arrays.copyOfRange(inorder,num+1,inorder.length);root.left=buildTree(preLeft,inoLeft);root.right=buildTree(preRight,inoRight);return root;}
}