Construct Binary Tree from Preorder and Inorder Traversal
public class Solution {
public void main(String[] args){
int[] A= new int[] {2,1,3} ;
int[] B = new int[] {1,2,3};
TreeNode root = buildTree(A , B) ;
print(root) ;
}
public void print(TreeNode root){
if(root == null){
return ;
}
print(root.left);
System.out.print(root.val + " ");
print(root.right);
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
if (preorder == null || inorder == null || preorder.length == 0 || inorder.length == 0 ){
return null ;
}
for (int i = 0 ; i < inorder.length ; i++){
map.put(inorder[i] , i);
}
return helper(preorder , inorder, 0 , preorder.length-1 , 0 , inorder.length-1, map );
}
public TreeNode helper(int[] preorder, int[] inorder, int preL, int preR, int inL, int inR, HashMap<Integer,Integer> map){
if(preL > preR || inL > inR){
return null ;
}
TreeNode root = new TreeNode(preorder[preL]) ;
int index = map.get(root.val);
root.left = helper(preorder , inorder, preL+1 , preL+index-inL , inL, index-1 , map);
root.right = helper(preorder, inorder, preR-(inR-index)+1, preR , index+1 , inR, map) ;
return root ;
}
}