[路飞]_力扣算法题_104.二叉树的最大深度

89 阅读1分钟
难度 简单\color{#2db55d}{简单}

题目内容 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

题解

我通过广度优先遍历来遍历其所有节点,每次遍历一层,最终获取它的最大深度。

// 鉴于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
};