zoukankan      html  css  js  c++  java
  • 重建二叉树(四)

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

    function reConstructBinaryTree(pre, vin)
    {
       
        if(pre.length==0 || vin.length==0){
            return null;
        }
        
        //前序遍历的第一个节点为根节点
        var root=pre[0];
        
        //找到在中序遍历中 根节点的索引
        var index=vin.indexOf(root);
        
        //根据根节点索引,可以在中序遍历中,将二叉树分为左子树和右子树
        var left=vin.slice(0,index);
        var right=vin.slice(index+1);
        
        var node=new TreeNode(root);
        
        //重建的二叉树的左子树和右子树也可以根据上面的步骤推导出来
        //左子树是根据前序和中序的左子树推导
        //右子树也是根据前序和中序的右子树推导
        
        node.left=reConstructBinaryTree(pre.slice(1,index+1),left);
        node.right=reConstructBinaryTree(pre.slice(index+1),right);
        
        return node;
    }
  • 相关阅读:
    【瞎口胡】基础数学 1 快速幂 整除 最大公约数
    【瞎口胡】二分图
    Windos下使用Redis
    VUE的踩坑日记(1)
    公告
    [维度打击]最大连续子序列
    常用函数
    树状数组
    高精度封装
    T4 模板之 单个文件
  • 原文地址:https://www.cnblogs.com/cmy1996/p/9601125.html
Copyright © 2011-2022 走看看