js刷力扣,将数组转换为二叉树

力扣中常见的二叉树问题, 给出的实例都是数组,但是我们本地想要调试时,就需要将数组转换为二叉树,然后进行调用

例如:

https://leetcode.cn/problems/find-mode-in-binary-search-tree/

在这里插入图片描述

https://leetcode.cn/problems/find-bottom-left-tree-value/

在这里插入图片描述
看核心

// 新建树节点类
function TreeNode (val, left, right) {
    this.val = (val === undefined) ? 0 : val;
    this.left = (left === undefined) ? null : left;
    this.right = (right === undefined) ? null : right;
}
function buildTree(val_list) {
	// 数组为空
	if(!val_list || val_list.length === 0) {
		return ;
    }
	// 根节点
	var root = new TreeNode(val_list.shift());
	
	var nodeQueue = [root];
	// 对root节点进行操作,更新node
	while(val_list.length > 0){
		var node  = nodeQueue.shift();
		// n = node.level + 1;	// 获取父节点的层级,子节点在该层级上+1
		// 构建:左孩子节点
		if(val_list.length === 0) {
			break;
        }
		var leftVal = val_list.shift();
		if(leftVal != null) {
			node.left = new TreeNode(leftVal);
			nodeQueue.push(node.left);
		}
		// 构建:右孩子节点
		if(val_list.length === 0) {
			break;
        }
		var rightVal = val_list.shift();
		if(rightVal != null) {
			node.right = new TreeNode(rightVal);
			nodeQueue.push(node.right);
		}
	}
	return root;
}

// dfs层次遍历二叉树
var levelOrder = function(root) {
    if (root === null)
        return []
    let result = [];
    let deep = 0;

    recursion(root);
    function recursion(root) {
        deep++;
        if (result[deep - 1]) {
            result[deep - 1].push(root)
        }
            
        else {
            result[deep - 1] = [root]
        }
            
        if (root.left != null) {
            recursion(root.left)
        }
           
        if (root.right !== null) {
            recursion(root.right)
        }
        deep--
        return;
    }
    return result;
};

// 层次遍历bfs
function levelOrderV2() {
    if(!root) {
        return []
    }
    const res = []; // 每一行中最大的值
    const queue = [root];
    let list = []; // 层次遍历结果
    // bfs
    while(queue.length) {
        let len = queue.length;
        let maxVal = -Number.MAX_VALUE;
        while(len > 0) {
            len --;
            const t = queue.shift();
            
            maxVal = Math.max(maxVal, t.val);
            list.push(t.val)
            if(t.left) {
                queue.push(t.left)
            }
            if(t.right) {
                queue.push(t.right)
            }
        }
        res.push(maxVal)
    }
    return list;
}
console.log(levelOrder(buildTree([1,3,2,5,3,null,9])))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值