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++
}
};
结语
以上就是胡哥今天给大家分享的内容,喜欢的小伙伴记得点赞
、收藏
呀,关注胡哥有话说,学习前端不迷路,欢迎多多留言交流...