Given preorder and inorder traversal of a tree, construct the binary tree.
public TreeNode buildTree(int[] preorder, int[] inorder) {
int size = inorder.length;
if(size == 0) return null;
return buildNodes(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);
}
private TreeNode buildNodes(int[] preorder,int[] inorder,int pstart, int pend, int istart, int iend){
if (pstart > pend) return null;
int point = preorder[pstart];
int i;
for( i = istart;i<iend;i++){
if(inorder[i] == point){
break;
}
}
TreeNode treeNode = new TreeNode(point);
int leftSize = i - istart;
treeNode.left = buildNodes(preorder, inorder, pstart+1, pstart+leftSize, istart, i-1);
treeNode.right = buildNodes(preorder, inorder, pstart+leftSize+1, pend, i+1, iend);
return treeNode;
}