0
点赞
收藏
分享

微信扫一扫

LeetCode 111. 二叉树的最小深度 | 算法 - 从菜鸟开始

111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

LeetCode 111. 二叉树的最小深度 | 算法 - 从菜鸟开始_二叉树

输入: root = [3,9,20,null,null,15,7]
输出: 2

方案一:BFS广度优先遍历

查询二叉树的最小深度,将二叉树视为自顶向下,一层层组成。BFS广度优先编辑即每次都获取当前一层的所有​​node​​​节点,将当前层节点遍历,查询出第一个​​node.left​​​和​​node.right​​​都是​​null​​的就是第一个叶子节点。

/**
* @method minDepthByBFS
* @description 通过广度优先遍历获取最小深度
* @param root {TreeNode | null}
* @returns {number}
*/
function minDepth(root: TreeNode | null): number {
// 临界点条件
if (root === null) {
return 0;
}

// 存储节点
const queue = [root];

// 定义深度
let depth = 1;

// 如果当前queue队列中有值,说明存在一层node
while (queue.length) {
// 获取当前队列元素的值
const len = queue.length;

// 操作的都是当前层node
// 注意这里的for循环终止条件len是当前层所有node的长度
for (let i = 0; i < len; i++) {
// 每次都取出队头第一个元素
const node = queue.shift();

// 当前这个节点的left和right都不存在,说明这个是叶子节点
if (node.left === null && node.right === null) {
// 直接返回结果即可
return depth;
}

// 将当前节点的left、right放入
if (node.left) {
queue.push(node.left);
}
if (node.right) {
queue.push(node.right)
}
}

// 每遍历一层,深度+1
depth++
}
};

LeetCode 111. 二叉树的最小深度 | 算法 - 从菜鸟开始_二叉树_02

结语

以上就是胡哥今天给大家分享的内容,喜欢的小伙伴记得​​点赞​​​、​​收藏​​呀,关注胡哥有话说,学习前端不迷路,欢迎多多留言交流...

举报

相关推荐

0 条评论