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)
      };
    }
  • 相关阅读:
    Maven 那点事儿
    maven pom文件详解
    Maven Missing artifact jar
    JVM调优总结 -Xms -Xmx -Xmn -Xss
    LoadRunner做性能测试 从设计到分析执行
    linux内核参数注释与优化
    tcpdump详解
    [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解
    MSM--Memcached_Session_Manager介绍及使用
    黏性Session和非黏性Session
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/reConstructBinaryTree.html
Copyright © 2011-2022 走看看