js通过数组创建二叉树

通过入参一个数组,生成二叉树

// 新建树节点类
class TreeNode {
    constructor(val, left, right) {
        this.val = (val === undefined ? 0 : val);
        this.left = (left === undefined ? null : left);
        this.right = (right === undefined ? null : right);
    }
}
/ 入参一个数组,生成二叉树
function buildTree(arr) {
	// 若没有参数或数组长度为0,则视为空树
    if (!arr || arr.length === 0) {
        return null;
    }
    
    // 先将数组第一个元素 设置为根结点
    let root = new TreeNode(arr.shift());
    
    // 节点队列 陆续从数组中为节点添加左右叶子
    let nodeQueue = [root];
    
    // 当数组剩余仍有元素,则持续为最近的节点添加叶子
    while (arr.length > 0) {
    
        // 从节点数组头部取出节点 为了添加叶子备用
        let node = nodeQueue.shift();
        
        // 若数组中无元素,则视为无叶子可添加,返回即可
        if (!arr.length) {
            break;
        }
        
        // 先从节点数组中取一个元素 转化为节点 拼接为左叶子
        let left = new TreeNode(arr.shift());
        node.left = left;
        nodeQueue.push(left);
        
        // 每拼接一片叶子节点 重新判断剩余叶子数量 若无剩余视为拼接完毕
        if (!arr.length) {
            break;
        }
        
        // 左侧叶子拼完,右边一样的操作
        let right = new TreeNode(arr.shift());
        node.right = right;
        nodeQueue.push(right);
    }
    
    // 最后返回根结点,通过根结点就能得到整个二叉树的结构
    return root;
}
// 测试
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(buildTree(arr))

所得结果:
在这里插入图片描述

最近面试是真的煎熬,终究是要补课的,加油。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值