class Solution {
int n;
public TreeNode buildTree(int[] preorder, int[] inorder) {
n = preorder.length;
if(n == 0){
return null;
}
return dfs(preorder,inorder,0,n - 1,0,n - 1);
}
TreeNode dfs(int[] pre,int[] ino,int l,int r,int a,int b){
if(l == r){
TreeNode node = new TreeNode(pre[l]);
return node;
}
if(l > r){
return null;
}
TreeNode root = new TreeNode(pre[l]);
int index = 0;
for(int i = a;i <= b;i++){
if(ino[i] == pre[l]){
index = i - a;
break;
}
}
root.left = dfs(pre,ino,l + 1,l + 1 + index - 1,a,a + index - 1);
root.right = dfs(pre,ino,l + 1 + index,r,a + index + 1,b);
return root;
}
}