zoukankan      html  css  js  c++  java
  • 剑指offer(4)重建二叉树

    题目描述

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回

    题目分析

    本题主要考察了二叉树的遍历,先复习下

    前序遍历(VLR): 
        1.访问根节点 
        2.前序遍历左子树 
        3.前序遍历右子树 
    中序遍历(LVR): 
        1.中序遍历左子树 
        2.访问根节点 
        3.中序遍历右子树 
    后序遍历(LRV): 
        1.后序遍历左子树 
        2.后序遍历右子树 
        3.访问根节点

    总之,做这种有关树、链表的题一定要有递归的思想,总之该题的解题思路就是四步,具体思路可以参考这里

    1 确定根,确定左子树,确定右子树。

    2 在左子树中递归。

    3 在右子树中递归。

    4 打印当前根。

    代码

    /* function TreeNode(x) {
     this.val = x;
     this.left = null;
     this.right = null;
     } */
    function reConstructBinaryTree(pre, vin) {
      // write code here
      if (pre.length === 0 || vin.length === 0) {
        return null;
      }
      // 前序第一个是根节点,也是中序左右子树的分割点
      const index = vin.indexOf(pre[0]),
        left = vin.slice(0, index),
        right = vin.slice(index + 1);
      return {
        val: pre[0],
        // 递归左右子树的前序、中序
        left: reConstructBinaryTree(pre.slice(1, index + 1), left),
        right: reConstructBinaryTree(pre.slice(index + 1), right)
      };
    }
  • 相关阅读:
    http://www.reg007.com/
    快速入门:十分钟学会Python(转)
    Python入门教程 超详细1小时学会Python(转)
    值得关注的10个python语言博客(转)
    【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照
    LeetCode——Spiral Matrix
    HTML中Select的使用具体解释
    为什么没有好用的Android游戏引擎?
    Map.EntrySet的使用方法
    jquery 仅仅读
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/reConstructBinaryTree.html
Copyright © 2011-2022 走看看