zoukankan      html  css  js  c++  java
  • 由二叉树的前序、中序遍历结果,重建二叉树

    前序遍历的第一个元素为根节点,在中序遍历中:根节点左右两侧即为左右子树的中序遍历结果。

    思路:

    1. 找到前序遍历的根节点在中序遍历中的位置
    2. 使用两个数组分别存储左子树的前序、中序遍历结果,递归构建左子树(中序结果为空--> 父节点为叶节点)
    3. 使用两个数组分别存储右子树的前序、中序遍历结果,递归构建右子树
    4. 将左右子树连接在当前根节点上
    • JavaScript实现
    function TreeNode(val) {
        this.val = val;
        this.left = null;
        this.right = null;
    }
    function reConstructBinaryTree(pre, vin)
    {
        const len = vin.length;
        if(!len) return null;//父节点为叶节点
        let root = new TreeNode(pre[0]);//当前根节点
        let target_idx = 0;
        for(let i = 0; i < len; i++){
            if(vin[i] == pre[0]){
                target_idx = i;
                break;
            }
        }
        let cur_pre = [],
            cur_vin = [];//左右子树的前中序遍历存储数组
        for(let i = 1; i <= target_idx; i++){//左子树
            cur_pre.push(pre[i]);//根节点之后加入与中序遍历等长的序列
            cur_vin.push(vin[i - 1]);//根节点之前的全部加入
        }
        root.left = reConstructBinaryTree(cur_pre, cur_vin);
        cur_pre.splice(0, cur_pre.length);
        cur_vin.splice(0, cur_vin.length);
        for(let i = target_idx + 1; i < len; i++){
            cur_pre.push(pre[i]);
            cur_vin.push(vin[i]);
        }
        root.right = reConstructBinaryTree(cur_pre, cur_vin);
        return root;
    }
    
  • 相关阅读:
    JDBC
    Maven入门初级教程
    os.path路径拓展 python3
    requests实现文件下载, 期间显示文件信息&下载进度_python3
    yield浅析-Python3
    Scoop
    U盘启动盘制作工具(安装Linux)
    JavaScript摘要笔记
    Hexo+Github搭建博客&各种设置
    Linux下搭建svn服务端
  • 原文地址:https://www.cnblogs.com/honey-cat/p/14634511.html
Copyright © 2011-2022 走看看