根据先序和中序遍历重建二叉树

重建二叉树

http://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6

1. 递归

1.1 分析

  1. pre[0]是root,在in中找到root的位置
  2. 找到root位置后,根据其index确定左右子树的pre和in的范围, 递归
    图片说明
    图片说明
    图片转载自 https://blog.nowcoder.net/n/7131c90ce3214472887b0f2f6652f5a7
  3. 注意,Arrays.copyOfRange()的后两个参数确定数组边界,是左闭右包"[)"

    1.2 代码

    import java.util.Arrays;
    public class Solution {
     public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
         if(pre.length == 0 || in.length == 0){
             return null;
         }
         //pre[0]是root,在in中找到root的位置
         TreeNode root = new TreeNode(pre[0]);
         for(int i = 0; i < in.length; i++){
             //找到root位置后,根据其index确定左右子树的pre和in的范围,递归
             //Arrays.copyOfRange()的后两个参数确定数组边界,是左闭右包"[)"
             if(in[i] == pre[0]){
                 root.left = reConstructBinaryTree(Arrays.copyOfRange(pre,1,1+i),
                 Arrays.copyOfRange(in,0,i));
                 root.right = reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),
                 Arrays.copyOfRange(in,i+1, in.length));
                 break;
             }
         }
         return root;
     }
    }

    1.3 复杂度

    空间:O(n)
    时间:O(n)
全部评论

相关推荐

纯真的河老师在喝茶:第一个是这个时间点岗位少,第二个是这个简历重复度太高了,10个有9个简历差不多的
点赞 评论 收藏
分享
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务