105. Construct Binary Tree from Preorder and Inorder Traversal
递归算法注意index的变化!注意Conor case!
class Solution {
HashMap<Integer,Integer> map=new HashMap<>();
private TreeNode buildTree(int[] preorder,int[] inorder,int sIndex,int eIndex, int preIndex){
int mIndex= map.get(preorder[preIndex]);
int leftLength=mIndex-sIndex;
int rightLength=eIndex-mIndex;
TreeNode node=new TreeNode(inorder[mIndex]);
if(leftLength>0){
node.left=buildTree(preorder,inorder,sIndex,mIndex-1,preIndex+1);
}
if(rightLength>0){
node.right=buildTree(preorder,inorder,mIndex+1,eIndex,preIndex+leftLength+1);
}
return node;
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length==0l||inorder.length==0||preorder.length!=inorder.length){
return null;
}
for(int i=0;i<inorder.length;i++){
map.put(inorder[i],i);
}
TreeNode root=buildTree(preorder,inorder,0,inorder.length-1,0);
return root;
}
}