持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
题目
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。
输入: root = [2,null,3,null,4,null,5,null,6]
输出: 5
题解
这道题我们无需去考虑它的左子树和右子树,根据题意我们去判断最左边或者最右边节点只要有一个没有了,那我们就让它终止掉,并且将记录的层级返回出去
我们先在函数中判断当前出参
root是否存在,存在则继续往下执行,如果不存在则直接返回0,然后我们声明一个stack常量,它是一个栈,我们把当前出参root和当前层级1传递过去,接下来使用循环,循环判断条件是当前栈的长度不为0,在循环中我们使用shift方法结合es6的解构方式将当前节点和层级从stack中解构出来,解构出来的o变量代表当前的节点数,n变量代表当前层级,然后进行判断当前变量o的左节点树和右节点树是否为空,为空则直接终止循环返回当前对应层级数,否则继续往下执行并进行判断,如果当前变量o的左节点存在,则利用push方法将当前左节点和当前的层级加1添加到stack栈中,变量o右节点也做出同样的操作即可
/**
* @param {TreeNode} root
* @return {number}
*/
var minDepth = function(root) {
if (!root) return 0;
const stack = [
[root, 1]
];
while (stack.length!=0) {
let [o, n] = stack.shift();
if (!o.left && !o.right) {
return n;
}
if (o.left) {
stack.push([o.left, n + 1])
}
if (o.right) {
stack.push([o.right, n + 1])
}
}
};
坚持努力,无惧未来!