题目
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
解
public static TreeNode buildTree(int[] preOrder,
int start,int[] inOrder,int end,int length){
//参数验证
if(preOrder==null||preOrder.length==0
||inOrder==null||inOrder.length==0||length<=0){
return null;
}
//建立子树根节点
int value=preOrder[start];
TreeNode root=new TreeNode(value);
//递归终止条件:子树只有一个节点
if(length==1){
return root;
}
//分拆子树的左子树和右子树
int i=0;
while(i<length){
if(value==inOrder[end-i]){
break;
}
i++;
}
//建立子树的左子树
root.left=buildTree(preOrder,start+1,inOrder,end-1-i,length-1-i);
root.right=buildTree(preOrder,start+length-i,inOrder,end,i);
return root;
}