美文网首页剑指offer
01-重建二叉树-递归

01-重建二叉树-递归

作者: 马甲要掉了 | 来源:发表于2020-04-23 22:07 被阅读0次

    题目描述

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

    知识回顾

    • 前序遍历:
      1.访问根节点
      2.前序遍历左子树
      3.前序遍历右子树
    • 中序遍历:
      1.中序遍历左子树
      2.访问根节点
      3.中序遍历右子树
    • 后序遍历:
      1.后序遍历左子树
      2.后序遍历右子树
      3.访问根节点

    分析

    做有关树、链表的题一定要有递归的思想,该题的解题思路可以分为:

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

    2 在左子树中递归。

    3 在右子树中递归。

    4 打印当前根。

    代码

    /* function TreeNode(x) {
        this.val = x;
        this.left = null;
        this.right = null;
    } */
    function reConstructBinaryTree(pre, vin) {
      
      if (pre.length === 0 || vin.length === 0) {
        return null;
      }
      // 前序第一个是根节点,也是中序左右子树的分割点
      let  index = vin.indexOf(pre[0]);
      let  left = vin.slice(0, index);
      let  right = vin.slice(index + 1);
      return {
        val: pre[0],
        // 递归左右子树的前序、中序
        left: reConstructBinaryTree(pre.slice(1, index + 1), left),
        right: reConstructBinaryTree(pre.slice(index + 1), right)
      };
    }
    

    相关文章

      网友评论

        本文标题:01-重建二叉树-递归

        本文链接:https://www.haomeiwen.com/subject/cqozihtx.html