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;
  }
}
posted @ 2021-03-06 13:02  ForMei  阅读(81)  评论(0)    收藏  举报