public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
if(pre == null || in == null){
return null;
}
return build(pre, in, 0, pre.length-1, 0, in.length-1);
}
public TreeNode build(int [] pre,int [] in, int pStart, int pEnd, int iStart, int iEnd){
if(pStart > pEnd || iStart > iEnd){
return null;
}
TreeNode head = new TreeNode(pre[pStart]);
int index = 0;
for(int i = iStart; i <= iEnd; i++){
if(in[i] == pre[pStart]){
index = i;
}
}
int leftLen = index - iStart;
int rightLen = iEnd - index;
if(leftLen > 0){
head.left = build(pre, in, pStart+1, pStart+leftLen, iStart, index-1);
}
if(rightLen > 0){
head.right = build(pre, in, pStart+leftLen+1, pEnd, index+1, iEnd);
}
return head;
}