class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
Map[HTML_REMOVED] map = new HashMap();
for(int i = 0; i < preorder.length; i++) {
map.put(inorder[i],i);
}
int pl = 0;
int pr = preorder.length-1;
int il = 0;
int ir = inorder.length-1;
return dfs(pl,pr,il,ir,preorder,map);
}
public TreeNode dfs(int pl, int pr, int il, int ir, int[] preorder, Map[HTML_REMOVED] map) {
if(pl > pr || pl < 0 || pl >= preorder.length) {
return null;
}
TreeNode node = new TreeNode(preorder[pl]);
node.left = dfs(pl+1,pl+map.get(preorder[pl])-il,il,map.get(preorder[pl])-1,preorder,map);
node.right = dfs(pl+map.get(preorder[pl])-il+1,pr,map.get(preorder[pl])+1,ir,preorder,map);
return node;
}
}