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

问题概述

给定一棵二叉树,找到它的最小深度。

最小深度 是从根节点到最近叶子节点的最短路径上的节点数量。

可视化说明

示例 1:最小深度 = 2

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

最短叶子路径:3 → 9(深度 2)

示例 2:最小深度 = 5

复制代码
    2
     \
      3
       \
        4
         \
          5
           \
            6

最短叶子路径:2 → 3 → 4 → 5 → 6(深度 5)

关键说明

  • 深度计算的是 节点数,不是边数
  • 叶子节点是 没有子节点 的节点
  • 最小深度是最短的根到叶子路径

解法 1:递归(DFS)

工作原理

使用 DFS 遍历两侧子树,注意缺失子节点的处理:

python 复制代码
class Solution:
    def minDepth(self, root):
        if not root:
            return 0
        if not root.left and not root.right:
            return 1
        left_depth = self.minDepth(root.left) if root.left else float('inf')
        right_depth = self.minDepth(root.right) if root.right else float('inf')
        return 1 + min(left_depth, right_depth)

复杂度分析

  • 时间复杂度: O(n) - 每个节点访问一次
  • 空间复杂度: O(h) - 递归栈深度

适用场景

  • 简单直观的 DFS
  • 理解最小深度逻辑
  • 仍是 O(n),但无法提前退出

解法 2:BFS(推荐)

工作原理

使用 BFS,在遇到第一个叶子时立即返回(最早的最小深度):

python 复制代码
from collections import deque

class Solution:
    def minDepth(self, root):
        if not root:
            return 0
        queue = deque([(root, 1)])
        while queue:
            node, depth = queue.popleft()
            if not node.left and not node.right:
                return depth
            if node.left:
                queue.append((node.left, depth + 1))
            if node.right:
                queue.append((node.right, depth + 1))
        return 0

复杂度分析

  • 时间复杂度: O(n) - 每个节点访问一次;由于提前退出,实际更快
  • 空间复杂度: O(n) - 队列最多容纳一层的节点

适用场景

  • 推荐 - 遇到首个叶子即可返回
  • 最小深度较小时通常更快
  • 迭代,易于理解

对比

方法 时间 空间 最佳适用
DFS(递归) O(n) O(h) 学习,逻辑直观
BFS(提前返回) O(n) O(n) 推荐 - 提前返回,通常更快

总结

最小深度用 BFS 最快:层序遍历遇到的第一个叶子就是答案。DFS 也可以,但无法像 BFS 那样早停。

相关推荐
2601_962078194 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_962218615 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949655 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885725 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
吞下星星的少年·-·5 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
李高钢5 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
怕浪猫5 小时前
长会话不崩盘:DeepSeek Harness 的上下文压缩与目标管理策略
面试·github·agent
ocean21036 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
Warson_L6 小时前
Python的OrderedDict
python
stolentime6 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法