当前位置: 首页 > news >正文

【LeetCode 104】二叉树的最大深度(C语言详解 | 递归 + BFS)

一、题目描述

给定一个二叉树root,返回其最大深度。

二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

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

示例 2:

输入:root = [1,null,2] 输出:2

二、解题思路

这道题是二叉树中的入门经典题,核心思想非常简单:

👉最大深度 = 1 + max(左子树深度, 右子树深度)


1️⃣ 递归思路(DFS)

从根节点开始:

  • 如果当前节点为空,深度为0

  • 否则:

    • 递归求左子树深度

    • 递归求右子树深度

    • 取较大值 + 1


2️⃣ 递归过程理解

假设树如下:

3 / \ 9 20 / \ 15 7

递归过程类似:

maxDepth(3) = 1 + max(maxDepth(9), maxDepth(20)) maxDepth(9) = 1 maxDepth(20) = 1 + max(1,1) = 2 最终结果 = 1 + max(1,2) = 3

三、代码实现(C语言)

✅ 方法一:递归(推荐)

int maxDepth(struct TreeNode* root) { if (root == NULL) return 0; int left = maxDepth(root->left); int right = maxDepth(root->right); return (left > right ? left : right) + 1; }

四、非递归解法(层序遍历 BFS)

除了递归,还可以用队列进行层序遍历

思路:

  • 每遍历一层,深度 +1

  • 使用队列存储每一层节点


✅ 方法二:BFS(队列实现)

#include <stdlib.h> int maxDepth(struct TreeNode* root) { if (root == NULL) return 0; struct TreeNode* queue[10000]; int front = 0, rear = 0; queue[rear++] = root; int depth = 0; while (front < rear) { int size = rear - front; // 当前层节点数 depth++; for (int i = 0; i < size; i++) { struct TreeNode* node = queue[front++]; if (node->left) queue[rear++] = node->left; if (node->right) queue[rear++] = node->right; } } return depth; }

五、复杂度分析

递归(DFS)

  • 时间复杂度:O(n)

  • 空间复杂度:O(h)(树高)

BFS

  • 时间复杂度:O(n)

  • 空间复杂度:O(n)(队列)


六、总结

方法优点缺点
递归(DFS)代码简洁,思路清晰可能栈溢出
BFS(层序)直观体现“层数”需要额外队列

七、扩展思考

这题是很多二叉树问题的基础模型:

  • ✅ 判断平衡二叉树(110)

  • ✅ 二叉树最小深度(111)

  • ✅ 路径相关问题

👉 核心套路:

“当前节点 = 子问题的组合”

http://www.jsqmd.com/news/516756/

相关文章:

  • LeetCode 188. 买卖股票的最佳时机 IV(C语言详解 + 通用模板)
  • 分布式限流实战 | 从算法原理到Redisson滑动窗口实现
  • 罗勒植物生长周期生长状态检测数据集VOC+YOLO格式1174张3类别
  • 保姆级教程:在Jetson Orin NX上,用Ubuntu 22.04和Livox MID360跑通FAST-LIO(避坑指南)
  • 智能酒厂浓度计哪个品牌好用,江苏迅创科技靠谱吗? - mypinpai
  • 手把手教你解决BottomSheetDialogFragment嵌套ScrollView时的奇怪关闭问题
  • 超自然行动组客服咨询AI流量赋能,重塑智能体验新标杆 - 速递信息
  • AIVideo与Matlab集成:科研视频数据处理与分析
  • MySQL数据优化+操作系统的生命周期的庖丁解牛
  • Node.js后端服务集成:调用InternLM2-Chat-1.8B API构建智能聊天接口
  • 2026瞬态吸收光谱仪采购指南:优质生产商、品牌排名与选购技巧 - 品牌推荐大师1
  • Surface Pro 7三年使用报告:从生产力工具到远程连接器的真实体验
  • Spring Authorization Server登出避坑指南:JWT Token撤销无效、前后端分离Session问题怎么破?
  • 嵌入式CAN消息队列:轻量无锁SPSC环形缓冲设计
  • 基于yolo11 yolo26算法的水果新鲜度识别 水果腐烂识别数据集 蔬菜新鲜度检测 水果识别 蔬菜识别 yolo数据集第10590期
  • Qwen3助力在线教育:计算机网络课程视频自动字幕生成案例
  • Ubuntu系统下如何彻底清理/dev/loop占用空间(附详细步骤)
  • 如果使用 LIKE ‘ %abc‘ (百分号开头),索引失效,ICP 也无用。
  • 人脸识别OOD模型快速上手:Postman调用API获取特征+质量分+置信区间
  • 聊聊2026年盐城靠谱的PTFE滤袋源头厂家,推荐防水PTFE滤袋源头厂家 - 工业设备
  • 告别MyBatis!用Hutool的Entity玩转数据库CRUD(含事务实战案例)
  • kawaii-mqtt软件包深度调优指南:如何给内存分配打标记快速定位泄漏点
  • 从零到一:在Ubuntu 20.04上配置NS-3.36与CLion集成开发环境
  • Z-Image-Turbo_Sugar脸部Lora与Unity引擎联动:为游戏角色快速生成多样化肖像素材
  • OpenClaw+ollama-QwQ-32B:3种常见自动化任务实战演示
  • Ubuntu24.04下Docker镜像源更换全攻略:从临时到永久,附最新可用源清单
  • TEC控温算法实战:如何用PID实现±0.1℃高精度恒温(附代码解析)
  • 探讨盐城靠谱的PTFE除尘滤袋厂家排名,前十名有谁? - 工业品网
  • Linux服务器上离线部署RAGFlow全流程(含Docker避坑指南)
  • Janus-Pro-7B实测指南:不同分辨率图片输入对理解效果的影响分析