- 给定一棵树的前序遍历 preorder 与中序遍历 inorder,然后构造二叉树并返回其根节点。
public int preIndex = 0;
public TreeNode buildTreeChild(int[] preorder, int[] inorder, int inbegin, int inend) {
if(inbegin > inend)
return null;
TreeNode root = new TreeNode(preorder[preIndex]);
int rootIndex = findIndexOfInorder(inorder, inbegin, inend, preorder[preIndex]);
preIndex++;
if(rootIndex == -1)
return null;
root.left = buildTreeChild(preorder, inorder, inbegin, rootIndex-1);
root.right = buildTreeChild(preorder, inorder, rootIndex+1, inend);
return root;
}
public int findIndexOfInorder(int[] inorder, int inbegin, int inend, int val){
for(int i=inbegin; i<=inend; i++){
if(inorder[i] == val)
return i;
}
return -1;
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder==null || inorder==null)
return null;
if(preorder.length<=0 || inorder.length<=0)
return null;
return buildTreeChild(preorder, inorder, 0, inorder.length-1);
}