class Solution {
Map<Integer,Integer> map;
public TreeNode buildTree(int[] preorder, int[] inorder) {
map = new HashMap();
int n = preorder.length;
for (int i = 0; i < n; i++) {
map.put(inorder[i],i);
}
return buildMyTree(preorder,inorder,0,n-1,0,n-1);
}
private TreeNode buildMyTree(int[] preorder, int[] inorder, int preorder_left, int preorder_right, int inorder_left, int inorder_right) {
if(preorder_left > preorder_right){
return null;
}
TreeNode root = new TreeNode(preorder[preorder_left]);
int inorder_root = map.get(preorder[preorder_left]);
int size_preorder_left = inorder_root - inorder_left;
root.left = buildMyTree(preorder,inorder,preorder_left + 1,preorder_left + size_preorder_left,inorder_left,inorder_root - 1);
root.right = buildMyTree(preorder,inorder,preorder_left + size_preorder_left + 1,preorder_right,inorder_root + 1,inorder_right);
return root;
}
}