持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
题目
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
给定二叉树
[3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
题解
我们先判断当前的出参
root是否存在,如果不存在则直接返回0,接下来我们声明一个stack常量,它是一个栈,用来它存储当前的出参root,在声明一个num变量,他是用于记录当前节点树的层级,每对节点树循环一次num变量则加1,然后进行循环,循环的判断条件是stack变量的长度不等于0,然后在循环内,我们获取到当前stack变量的长度并用len变量记录起来,然后在将专门用于记录节点数的层级num变量进行自增1,我们这里在使用一个循环,这个循环的判断条件为len长度为0,我们每次执行循环的时候,都会对len变量进行自减1,在循环内部我们使用shift方法拿出当前节点树并且用常量o存储起来,然后进行判断当前o常量的左节点是否存在,如果存在则使用push方法添加到stack栈中,然后在进行判断o常量的右节点是否存在,如果存在则也使用push方法添加到stack栈中,最后当循环完成后,则将记录节点深度的变量num返回出去即可
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
if (!root) return 0;
const stack = [root];
let num = 0;
while (stack.length!=0) {
let len = stack.length;
num++;
while (len--) {
const o = stack.shift();
if (o.left) {
stack.push(o.left)
}
if (o.right) {
stack.push(o.right)
}
}
}
return num;
};
坚持努力,无惧未来!