104. Maximum Depth of Binary Tree

練習日期:2026-02-01

難度:Easy

類型:Tree、Depth-First Search、Breadth-First Search、Binary Tree

📘 題目敘述

給你一棵二元樹的根節點 root,請回傳它的最大深度。

二元樹的最大深度是指:從根節點一路往下到最遠葉節點的最長路徑上,包含的節點數量。

條件限制

  • 樹的節點數量在 [0, 10^4] 範圍內。
  • -100 <= Node.val <= 100

🧠 解題思路

我用遞迴去算深度(DFS),概念很直接:

  • 一棵樹的最大深度 = max(左子樹最大深度, 右子樹最大深度) + 1
  • 如果 root == nullptr(空樹 / 走到葉子下面),深度就是 0

核心不變式
maxDepth(node) 回傳的是「以 node 為根的子樹」的最大深度。
所以只要把左、右子樹的答案拿回來取最大,再加上自己這一層的 1 就結束。

所有變數

  • root:目前子樹的根節點指標
  • lroot->left 子樹的最大深度
  • rroot->right 子樹的最大深度

🪜 主要流程步驟

1. 遇到空節點就回傳 0

  • if (root == nullptr) return 0;
  • 代表:沒有節點就沒有深度(這也是遞迴的停止條件)

2. 遞迴取得左右子樹深度

  • l = maxDepth(root->left);
  • r = maxDepth(root->right);
  • 這兩行會把「左右子樹的最大深度」算出來

3. 回傳本層答案

  • return max(l, r) + 1;
  • +1 是把「目前這個 root 節點」算進路徑長度

💻 程式碼實作

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
 * right(right) {}
 * };
 */
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (root == nullptr) {
            return 0;
        }
        int l = maxDepth(root->left);
        int r = maxDepth(root->right);
        return max(l, r) + 1;
    }
};

https://leetcode.com/problems/maximum-depth-of-binary-tree/

作者: scottnick
撰寫日期: 2026-02-01
類別:
原文連結: https://scottnick.github.io/cpp-notes/neetcode150/104-maximum-depth-of-binary-tree.html