力扣(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 那样早停。

相关推荐
多米Domi0117 小时前
0x3f 第49天 面向实习的八股背诵第六天 过了一遍JVM的知识点,看了相关视频讲解JVM内存,垃圾清理,买了plus,稍微看了点确定一下方向
jvm·数据结构·python·算法·leetcode
人工智能训练13 小时前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
yaoming16813 小时前
python性能优化方案研究
python·性能优化
码云数智-大飞14 小时前
使用 Python 高效提取 PDF 中的表格数据并导出为 TXT 或 Excel
python
biuyyyxxx15 小时前
Python自动化办公学习笔记(一) 工具安装&教程
笔记·python·学习·自动化
极客数模15 小时前
【2026美赛赛题初步翻译F题】2026_ICM_Problem_F
大数据·c语言·python·数学建模·matlab
A_nanda16 小时前
c# MOdbus rto读写串口,如何不相互影响
算法·c#·多线程
小鸡吃米…17 小时前
机器学习中的代价函数
人工智能·python·机器学习
Li emily18 小时前
如何通过外汇API平台快速实现实时数据接入?
开发语言·python·api·fastapi·美股
代码雕刻家18 小时前
2.4.蓝桥杯-分巧克力
算法·蓝桥杯