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)
      };
    }
  • 相关阅读:
    HBase
    linux配置环境变量
    ubuntu17.04安装flash
    WebService服务及客户端 编程
    eclipse
    设计模式:简单工厂
    设计模式:工厂方法
    C#加载dll 创建类对象
    C#线程
    Opencv 3入门(毛星云)摘要
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/reConstructBinaryTree.html
Copyright © 2011-2022 走看看