根据一棵树的前序遍历与中序遍历构造二叉树。
注意:你可以假设树中没有重复的元素。
思路
(1)参见剑指Offer-树-面试题7:重建二叉树
解法1
执行用时 :22 ms, 在所有 Java 提交中击败了12.68%的用户
内存消耗 :43.5 MB, 在所有 Java 提交中击败了10.24%的用户
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return buildTree(preorder, 0, preorder.length-1, inorder, 0, inorder.length-1);
}
TreeNode buildTree(int[] preorder, int preStart, int preEnd, int[] inorder, int inStart, int inEnd){
//if(preStart >= preEnd || inStart >= inEnd ){ errror1
if(preStart > preEnd || inStart > inEnd ){
return null;
}
int index = inStart;
while(preorder[preStart] != inorder[index] && index < inEnd){
index++;
}
TreeNode root = new TreeNode(inorder[index]);
int len = index - inStart;
root.left = buildTree(preorder, preStart+1, preStart+len, inorder, inStart, index-1);
root.right = buildTree(preorder, preStart+len+1, preEnd, inorder, index+1, inEnd);
return root;
}
}