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

相关推荐
GuWenyue8 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
想会飞的蒲公英9 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
我叫洋洋9 小时前
C ++ [ hello world ]
c语言·c++·算法
SeaTunnel10 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记10 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名10 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
奋发向前wcx10 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
Marst Code11 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook11 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
kyriewen11 小时前
我扒了最近的前端面经——2026年面试不背八股文了,考这5样
前端·面试·ai编程