JS实现二叉树的重建

function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
}
  1. 前序or后序用来确认根节点
    前序中,根节点在第一个,后序中根节点在最后一个
  2. 利用根节点将中序遍历数组分割为左子树、右子树 相关数据。
    对于中序遍历,根节点左边的节点即左子树,根节点右边的节点即右子树。

1.根据前序+中序


function creatTree(pre, vin)
{
    if(pre.length === 0 || vin.length === 0){
        return null;
    }
    //创建根节点,根节点是前序遍历的第一个数
    var root = pre[0];
    var tree = new TreeNode(root);
    //找到中序遍历根节点所在位置
    var index = vin.indexOf(root);
    tree.left = creatTree(pre.slice(1,index+1),vin.slice(0,index));
    tree.right = creatTree(pre.slice(index+1),vin.slice(index+1));
    return tree;
}

2.根据后序+中序

function creatTree(pos, vin)
{
    if(!pos || vin.length === 0){
        return null;
    }
    //创建根节点,根节点是后序遍历的最后一个数
    var root = pos[pos.length-1];
    var tree = new TreeNode(root);
    //找到中序遍历根节点所在位置
    var index = vin.indexOf(root);
    tree.left=creatTree(pos.slice(0,index),vin.slice(0,index))
    tree.right=creatTree(pos.slice(index,pos.length-1),vin.slice(index+1))
    return tree;
}

本文链接https://blog.csdn.net/qq_39903567/article/details/115867151

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值