前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重建二叉树

重建二叉树

作者头像
用户1148830
发布2018-01-03 18:06:56
6040
发布2018-01-03 18:06:56
举报

【原题】 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 【思路】 今天捡起之前一直没有ac的一道题,这道题显然是用递归的方法求解。十分钟过去,没有调试,竟然就 通过了,也是神奇。仔细看了以前提交的多次不通过的代码,思路其实是一样的,主要在于长度,递归的起止位置要特别小心,已经作为根结点的index就不用包含在下一次的递归序列当中。最好以一个栗子来手动演示一下。

代码语言:javascript
复制
public class Solution {
   public TreeNode reConstructBinaryTreeCore(int[] pre,int preStart,int preEnd,
            int[] in,int inStart,int inEnd){
        if(preEnd-preStart<=0||inEnd<=inStart) return null;
        TreeNode root=new TreeNode(pre[preStart]);
        int mid=inStart;
        //以前序第一个结点为根结点,在中序序列中找到该节点的位置,即可以递归构建左右子树
        for(int i=inStart;i<inEnd;i++)
            if(in[i]==pre[preStart]){
                mid=i;break;
            }
        int leftLen=mid-inStart;
        int rightLen=inEnd-mid;
        root.left=reConstructBinaryTreeCore(pre,preStart+1,preStart+1+leftLen,in,inStart,mid);//递归构建左子树
        root.right=reConstructBinaryTreeCore(pre,preStart+leftLen+1,preEnd,in,mid+1,inEnd);//递归构建右子树
        return root;
    }
    public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        if(pre.length!=in.length) return null;
        return reConstructBinaryTreeCore(pre,0,pre.length,in,0,in.length);

    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年07月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档