题目
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
给定二叉树
[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; };
坚持努力,无惧未来!