难度
题目内容 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
题解
我通过广度优先遍历来遍历其所有节点,每次遍历一层,最终获取它的最大深度。
// 鉴于arr.shift的低效率,自定义一个通过reverse来弹出第一个元素的shift函数
function shift(arr) {
arr.reverse()
const res = arr.pop();
arr.reverse();
return res
}
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
// 如果节点为空直接返回0
if(!root) return 0
let layer = 0;
// 初始化队列
let que = [root];
while(que.length) {
// 获取一层的宽度,然后一次性把这层遍历完
let len = que.length
for(let i=0;i<len;i++) {
// 这里需要注意弹出元素的顺序,否则先弹出下一层的元素的话遍历就提前终止了
let node = shift(que)
// 初始化下一层
if(node.left) que.push(node.left)
if(node.right) que.push(node.right)
}
// 遍历完一层,层数+1
layer++;
}
// 把层数返回出去
return layer
};