【为进大厂力扣刷题】7. 二叉树的最大深度

141 阅读2分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述:

104. 二叉树的最大深度

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

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

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

二、思路分析:

树结构是链表的升级, 二叉树一分二,左右两个分支。

function TreeNode(val, left, right) {
    this.val = (val===undefined ? 0 : val)
    this.left = (left===undefined ? null : left)
    this.right = (right===undefined ? null : right)
}

树与图的搜索算法常用 广度优先搜索深度优先搜索

广度优先搜索 BFS

BFS(Breadth First Search)属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 广度优先搜索使用队列(queue)来实现

深度优先搜索 DFS

DFS(Depth-First-Search)对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。深度优先搜索用栈(stack)来实现

解法1 DFS

栈 与 递归的思想类似,一直递进到树的最后一个节点null,并返回层数结果。

/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function(root) {
    // 边界条件
    if(!root){
        return 0
    }
    // 每次返回层数+1,最后取最大层数
    return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1
};

解法2 BFS

广度优先搜索 可以理解为 把每一层都列出来,按层的维度去遍历,直到最后一层无数据。

var maxDepth = function(root) {
    // 判空
    if(!root) return 0
    
    let q = [root],  // 父层队列
        layer = 0    // 层数
    while(q.length){ // 有数据说明没到底,就走向下一层
        let next_level_queue = [] // 下一层队列
        while(q.length > 0){
            let node = q.shift() // 遍历q,把子项都放进 next_level_queue
            if(!node) continue
            if(node.left){
                next_level_queue.push(node.left)
            }
            if(node.right){
                next_level_queue.push(node.right)
            }
        }
        q = next_level_queue
        layer++
    }
    return layer
};

image.png

代码不够简练,再优化一下,通过记录q的长度,少用一个变量next_level_queue。

var maxDepth = function(root) {
    if(!root) return 0
    let q = [root],
        layer = 0
    while(q.length){
        let len = q.length
        while(len){
            let node = q.shift()
            if(node.left){
                q.push(node.left)
            }
            if(node.right){
                q.push(node.right)
            }
            len--
        }
        layer++
    }
    return layer
};

image.png ok拉,拜拜~