力扣(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 加上左右子树的最大深度。

相关推荐
liang_jy17 分钟前
文件管理(一)—— 初识文件管理
面试·操作系统
liang_jy33 分钟前
文件管理(二)—— 文件结构
面试·操作系统
互联网中的一颗神经元1 小时前
小白python入门 - 39. 采集流水线小项目
开发语言·python
徐小夕1 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
郭老二2 小时前
【Python】常用模块:xmlrpc
python
名字还没想好☜2 小时前
Python itertools 实战:用 groupby、chain、islice 优雅处理大数据流
linux·windows·python·迭代器·itertools
可编程芯片开发2 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
威联通网络存储3 小时前
TS-h2490FU在面板制造Array段AOI缺陷画廊中的并联
python·制造
小小仙子3 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习