1 public class Solution {
2 public TreeNode buildTree(int[] preorder, int[] inorder) {
3 int len =preorder.length;
4 if(len<=0) return null;
5 return build(preorder,0,len-1,inorder,0,len-1);
6 }
7 public TreeNode build(int[]pre,int preS,int preE,int []in,int inS,int inE){
8 if(preS>preE || inS>inE) return null;
9 int first = pre[preS];
10 TreeNode p = new TreeNode(first);
11 if(preS==preE) // don't forget this
12 return p;
13 int index = inS;
14 while(in[index]!=first){
15 index++;
16 }
17 int len =index-inS;
18
19 p.left = build(pre,preS+1,preS+len,in,inS,index-1);
20 p.right = build(pre,preS+len+1,preE,in,index+1,inE);
21 return p;
22 }
23 }