力扣刷题#27-0104-二叉树的最大深度

力扣刷题#27-0104-二叉树的最大深度

题目

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

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

我的思路

第一反应:找孩子?

看到"最大深度",我最初的直觉是"去孩子那里找"。但顺着这个直觉继续想,其实可以把它变成一个递归问题:

一棵树的最大深度 = 左右子树里较深的那个,再加 1(自己这一层)。

maxDepth(根) = 1 + max( maxDepth(左子树), maxDepth(右子树) )

生活化类比

你想知道自己多高,不用从头量到脚。先让左边的兄弟报个"身高",右边兄弟也报个,取更高的那个,加上你自己这一层的 1,就是整棵树的高度。


递归的两个要素

要素 答案
递归出口(base case) 节点为空 → 深度是 0,直接返回
递归公式 1 + max(左子树深度, 右子树深度)

一步步展开

          3
         / \
        9  20
           / \
          15  7

depth(3) = 1 + max(depth(9), depth(20))
         = 1 + max(1, 2)
         = 3
节点 计算过程 返回
9 1 + max(0, 0) 1
15 1 + max(0, 0) 1
7 1 + max(0, 0) 1
20 1 + max(1, 1) 2
3 1 + max(1, 2) 3

最长路径:3 → 20 → 15(或 7),共 3 个节点,深度为 3 ✅


我的 AC 代码

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (root == nullptr) return 0;
        int newd = max(maxDepth(root->left), maxDepth(root->right));
        return newd + 1;
    }
};

一遍过。


代码逐段解析

第 3 行:递归出口

if (root == nullptr) return 0;

空节点没有深度,返回 0。这是递归必须的终止条件——没有它,递归永远往下钻到 nullptr 再崩。

第 4 行:递归公式

int newd = max(maxDepth(root->left), maxDepth(root->right));

分别问左右子树"你们有多深",取较深的一个。递归先信任子树能给出正确答案——这就是递归的思维:假设子问题已经解决,用子问题的答案拼出当前问题的答案。

第 5 行:加上自己

return newd + 1;

子树深度 + 当前节点这一层 = 当前树的最大深度。


其他解法对比

BFS 层序法(我上一题学的)

层序遍历每走一层深度 +1:

int maxDepth(TreeNode* root) {
    if (!root) return 0;
    queue<TreeNode*> q;
    q.push(root);
    int depth = 0;
    while (!q.empty()) {
        int sz = q.size();
        depth++;                      // 每处理完一层,深度 +1
        for (int i = 0; i < sz; i++) {
            TreeNode* cur = q.front(); q.pop();
            if (cur->left)  q.push(cur->left);
            if (cur->right) q.push(cur->right);
        }
    }
    return depth;
}
对比 递归(DFS) BFS
代码 3 行核心 更长
思路 自顶向下分解 逐层推进
适用 几乎所有树题 需要"一层"概念时

复杂度分析

维度 说明
时间复杂度 O(n) 每个节点访问一次
空间复杂度 O(h) 递归栈深度 = 树高 h

关键点总结

关键点 说明
核心公式 1 + max(左深, 右深)
递归出口 root == nullptr → 0
递归思维 先假设子树能算出答案,用子答案拼当前答案
数学归约 大问题 → 两个子问题,深度每次减 1 直到空

本文档由 AI 辅助生成,作者提供问题,思路和代码,AI仅负责文本修饰,综合获得以上内容。

posted @ 2026-08-06 15:05  STA_running  阅读(2)  评论(0)    收藏  举报