LeetCode 热题100 104. 二叉树的最大深度

embedded/2025/2/26 16:03:04/

LeetCode 热题100 | 104. 二叉树的最大深度

大家好,今天我们来解决一道经典的算法题——二叉树的最大深度。这道题在 LeetCode 上被标记为简单难度,要求我们给定一个二叉树的根节点 root,返回其最大深度。下面我将详细讲解解题思路,并附上 Python 代码实现。


题目描述

给定一个二叉树 root,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。

示例:

输入:root = [3,9,20,null,null,15,7]
输出:3

解题思路

二叉树的最大深度可以通过递归或迭代的方式来计算。递归法是最直观的方法,而迭代法通常使用广度优先搜索(BFS)来实现。

核心思想
  1. 递归法

    • 二叉树的深度等于其左右子树的最大深度加 1。
    • 递归地计算左右子树的深度,取最大值并加 1。
  2. 迭代法(BFS)

    • 使用队列进行层次遍历,每遍历一层,深度加 1。

代码实现

方法 1:递归法
python">class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef maxDepth(root):""":type root: TreeNode:rtype: int"""if not root:return 0# 递归计算左右子树的深度left_depth = maxDepth(root.left)right_depth = maxDepth(root.right)# 返回左右子树的最大深度加 1return max(left_depth, right_depth) + 1
方法 2:迭代法(BFS)
python">from collections import dequedef maxDepth(root):""":type root: TreeNode:rtype: int"""if not root:return 0queue = deque([root])  # 使用队列存储节点depth = 0  # 初始化深度while queue: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)  # 将右子节点加入队列depth += 1  # 遍历完一层,深度加 1return depth

代码解析

递归法
  1. 递归终止条件

    • 如果当前节点为空,返回深度 0。
  2. 递归计算左右子树的深度

    • 分别递归计算左子树和右子树的深度。
  3. 返回最大深度

    • 返回左右子树的最大深度加 1(当前节点的深度)。
迭代法(BFS)
  1. 初始化

    • 使用队列存储节点,初始时将根节点加入队列。
    • 初始化深度 depth 为 0。
  2. 层次遍历

    • 遍历当前层的所有节点,将它们的子节点加入队列。
    • 每遍历完一层,深度加 1。
  3. 返回深度

    • 遍历结束后,返回深度 depth

复杂度分析

  • 时间复杂度:O(n),其中 n 是二叉树的节点数。每个节点被访问一次。
  • 空间复杂度
    • 递归法:O(h),其中 h 是二叉树的高度,递归调用栈的深度为树的高度。
    • 迭代法:O(n),队列的最大空间为树的宽度。

示例运行

示例 1
python"># 创建二叉树 [3,9,20,null,null,15,7]
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)# 计算最大深度
print(maxDepth(root))  # 输出: 3
示例 2
python"># 创建二叉树 [1,null,2]
root = TreeNode(1)
root.right = TreeNode(2)# 计算最大深度
print(maxDepth(root))  # 输出: 2
示例 3
python"># 创建空二叉树 []
root = None# 计算最大深度
print(maxDepth(root))  # 输出: 0

总结

通过递归或迭代的方式,我们可以高效地计算二叉树的最大深度。递归法代码简洁,但可能受递归深度限制;迭代法使用队列进行层次遍历,适合处理较大的树。希望这篇题解对你有帮助!如果还有其他问题,欢迎继续提问!

关注我,获取更多算法题解和编程技巧!


http://www.ppmy.cn/embedded/167291.html

相关文章

2024年国赛高教杯数学建模D题反潜航空深弹命中概率问题解题全过程文档及程序

2024年国赛高教杯数学建模 D题 反潜航空深弹命中概率问题 原题再现 应用深水炸弹(简称深弹)反潜,曾是二战时期反潜的重要手段,而随着现代军事技术的发展,鱼雷已成为现代反潜作战的主要武器。但是,在海峡或…

在项目中调用本地Deepseek(接入本地Deepseek)

前言 之前发表的文章已经讲了如何本地部署Deepseek模型,并且如何给Deepseek模型投喂数据、搭建本地知识库,但大部分人不知道怎么应用,让自己的项目接入AI模型。 文末有彩蛋哦!!! 要接入本地部署的deepsee…

c++返回const引用值

c在通过赋值的时候,其实是重载了operator操作符,然后在里面完成了大量操作,把旧变量里的内容一点点复制到新变量里,才完成赋值的。如果旧变量还销毁了,那就浪费更多的计算负荷。 如果返回引用值,则新的变量…

OmniParser V2 与 OmniTool:解锁计算机自动化操控的新境界

在人工智能蓬勃发展的时代,各类自动化工具如雨后春笋般涌现,为人们的工作和生活带来了前所未有的便利。其中,OmniParser V2 与 OmniTool 的组合,凭借其强大的功能和创新的设计,成为了计算机自动化操控领域的焦点。 OmniParser V2 是微软开源的一款极具实力的屏幕解析模型,…

【Python爬虫(50)】从0到1:打造分布式爬虫项目全攻略

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

React加TypeScript最新部署完整版

React TypeScript 全流程部署指南 一、环境准备与项目初始化 关于node.js及npm的安装请参见我的文章。 1.1 创建项目(React TypeScript) # 使用官方推荐脚手架(Vite 5.x) npx create-vitelatest my-app --template react-ts …

SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当下这个高速发展的时代,网络科技正以令人惊叹的速度不断迭代更新。从 5G …

【Ambari】Ranger KMS

目录 一、Ranger KMS介绍 二、KMS基于Ranger插件安装 一、Ranger KMS介绍 Ranger KMS是把数据存储入后台数据库中。通过Ranger Admin可以集中化管理KMS服务。 Ranger KMS有三个优点 l Key management Ranger admin 提供了创建,更新,删除密钥的Web UI…