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

发布时间:2026/7/9 5:23:28

【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否则递归求左子树深度递归求右子树深度取较大值 12️⃣ 递归过程理解假设树如下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✅ 路径相关问题 核心套路“当前节点 子问题的组合”

相关新闻