力扣(LeetCode) 104: 二叉树的最大深度 - 解法思路

问题概述

给定一个二叉树的根节点 root,返回它的最大深度。

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

可视化说明

示例 1:最大深度 = 3

复制代码
        3
       / \
      9   20
          / \
         15  7

从根到叶子的最长路径是:3 → 20 → 15(或 3 → 20 → 7)

深度 = 3 个节点

示例 2:最大深度 = 2

复制代码
    1
     \
      2

从根到叶子的最长路径是:1 → 2

深度 = 2 个节点

深度计算

  • 深度 = 从根节点到目标节点的节点数(包含根节点和目标节点)
  • 根节点的深度为 1
  • 空树的深度为 0
  • 最大深度 = 从根到任意叶子的最长路径

解法 1:递归(推荐)

工作原理

递归计算左右子树的深度,然后返回 1 + 两者的最大值:

python 复制代码
class Solution:
    def maxDepth(self, root):
        if not root:
            return 0
        
        left_depth = self.maxDepth(root.left)
        right_depth = self.maxDepth(root.right)
        
        return 1 + max(left_depth, right_depth)

复杂度分析

  • 时间复杂度: O(n) - 每个节点恰好访问一次
  • 空间复杂度: O(h) - 递归栈深度等于树的高度(最坏情况 O(n) 对于倾斜树)

何时使用

  • 推荐 - 最直观和简洁的解决方案
  • 自然的递归结构匹配树结构
  • 易于理解和实现

关键洞察

树的最大深度是:

  • 如果树为空,则为 0
  • 否则为 1 + max(左子树深度, 右子树深度)

解法 2:迭代(使用 BFS)

工作原理

使用 BFS(层序遍历)来计数层数:

python 复制代码
from collections import deque

class Solution:
    def maxDepth(self, root):
        if not root:
            return 0
        
        queue = deque([root])
        depth = 0
        
        while queue:
            depth += 1
            level_size = len(queue)
            
            for _ in range(level_size):
                node = queue.popleft()
                
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
        
        return depth

复杂度分析

  • 时间复杂度: O(n) - 每个节点恰好访问一次
  • 空间复杂度: O(n) - 队列在最坏情况下可以容纳 n/2 个节点(完全树)

何时使用

  • 递归的替代方案
  • 避免非常深的树的潜在栈溢出
  • 需要逐层处理时有用

对比

方法 时间 空间 最佳适用
递归 O(n) O(h) 大多数情况,直观
迭代(BFS) O(n) O(n) 深度树,避免递归

总结

两种方法都实现了 O(n) 时间复杂度。递归解决方案通常因其简单性而更受欢迎。关键洞察是最大深度等于 1 加上左右子树的最大深度。

相关推荐
似水明俊德2 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
qq_417695052 小时前
机器学习与人工智能
jvm·数据库·python
无极低码2 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
漫随流水2 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
软件算法开发3 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
yy我不解释3 小时前
关于comfyui的mmaudio音频生成插件时时间不一致问题(一)
python·ai作画·音视频·comfyui
无限大64 小时前
AI实战03:Java开发岗专属工作流|用AI辅助代码审查与文档生成
面试
superior tigre4 小时前
22 括号生成
算法·深度优先
紫丁香4 小时前
AutoGen详解一
后端·python·flask