zoukankan      html  css  js  c++  java
  • 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上即可。递归要注意出口,假设最后只有一个元素了,那么就要返回。

  • 相关阅读:
    链家大数据多维分析引擎实践
    html 读取变量
    django 分配字典给前台模板
    django将数组传递给前台模板
    fetachone和fetchall
    django捕获url中的值
    django 控制页面跳转
    MySQL的前缀索引及Oracle的类似实现
    django url捕获
    django 页面调用方法
  • 原文地址:https://www.cnblogs.com/hddandelion/p/15157684.html
Copyright © 2011-2022 走看看