3.输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字
3.输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字
思路:
1.根据前序遍历可以找到根节点
2.迭代中序遍历结果,找到根节点的索引,左边是左子树,右边是右节点
3.递归处理左右子树,注意Arrays的函数区间左闭右开
public class Solution{
public TreeNode ContructTree(int[] pre,int[] in){
if(pre.length==null||in.length==null) return null;
TreeNode root=new TreeNode(pre[0]);
for(int i=0;i<in.length;i++){
if(in[i]==root){
//左子树
root.left=ContructTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(in,0,i));
//右子树
root.right=ContructTree(Arrasy.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(in,i+1,n.length));
}
}
retrun root;
}
}