• JZ4 重建二叉树


    描述

    给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。
    例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。
     
    提示:
    1.0 <= pre.length <= 2000
    2.vin.length == pre.length
    3.-10000 <= pre[i], vin[i] <= 10000
    4.pre 和 vin 均无重复元素
    5.vin出现的元素均出现在 pre里
    6.只需要返回根结点,系统会自动输出整颗树做答案对比

    示例1

    输入:
    [1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6]
    返回值:
    {1,2,3,4,#,5,6,#,7,#,#,8}
    说明:
    返回根节点,系统会输出整颗二叉树对比结果      

    示例2

    输入:
    [1],[1]
    返回值:
    {1}

    示例3

    输入:
    [1,2,3,4,5,6,7],[3,2,4,1,6,5,7]
    返回值:
    {1,2,5,3,4,6,7}

    =========================================================================================================================

    解题思路:
    这道题我根本没有头绪,只知道先序序列中的第一个节点是中序序列中的中节点,中节点的两边分别为它的左子树和右子树。

    因为是树的结构,一般都是用递归来实现。

    用数学归纳法的思想就是,假设最后一步,就是root的左右子树都已经重建好了,那么我只要考虑将root的左右子树安上去即可。

    根据前序遍历的性质,第一个元素必然就是root,那么下面的工作就是如何确定root的左右子树的范围。

    根据中序遍历的性质,root元素前面都是root的左子树,后面都是root的右子树。那么我们只要找到中序遍历中root的位置,就可以确定好左右子树的范围。

    正如上面所说,只需要将确定的左右子树安到root上即可。递归要注意出口,假设最后只有一个元素了,那么就要返回。

  • 相关阅读:
    git
    代理上网时git不能直接连接远程库的解决办法
    Python程序练习2--模拟三级菜单
    python os模块常用文件操作方法
    Python程序练习1-模拟用户登录验证
    牛牛牛图片胡乱下载
    oozie 4.1.0与4.2.0版本问题BUG
    hbase 协处理器,实现group by,distinct函数
    Js公共操作类 之 String 扩展方法介绍(一)
    CSS3之伪元素选择器和伪类选择器
  • 原文地址:https://www.cnblogs.com/hddandelion/p/15157684.html
Copyright © 2020-2023  润新知