📘 題目敘述
給你一棵二元樹的根節點 root,請回傳它的最大深度。
二元樹的最大深度是指:從根節點一路往下到最遠葉節點的最長路徑上,包含的節點數量。
條件限制
- 樹的節點數量在
[0, 10^4]範圍內。 -100 <= Node.val <= 100。
🧠 解題思路
我用遞迴去算深度(DFS),概念很直接:
- 一棵樹的最大深度 =
max(左子樹最大深度, 右子樹最大深度) + 1 - 如果
root == nullptr(空樹 / 走到葉子下面),深度就是0
核心不變式:
maxDepth(node)回傳的是「以node為根的子樹」的最大深度。
所以只要把左、右子樹的答案拿回來取最大,再加上自己這一層的1就結束。
所有變數
root:目前子樹的根節點指標l:root->left子樹的最大深度r:root->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/