題目出處
https://leetcode.com/problems/maximum-depth-of-binary-tree/
難度
Easy
題目分類
Tree, Depth-First Search, Breadth-First Search, Binary Tree
2026-07-30 二刷
個人範例程式碼 - 二刷 (2026/07/30)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
def dfs(root):
if not root:
return 0
return 1 + max(dfs(root.left), dfs(root.right))
return dfs(root)
算法說明
最單純的算樹高,用 dfs 可解
Time Complexity
O(n)
Space Complexity
O(h) # 主要算的是 dfs 存的 stack 深度,依據樹深決定
- worst:skewed tree O(N)
- best:balanced tree O(logN)
Boundary conditions
小心處理 no root 的問題
2021-04-02 一刷
個人手繪解法筆記 (解法重點)
這題就是簡單考樹的遍歷,
用 while 來一層一層刷出深度。
從 list 翻譯樹的長相
- 示意圖: (我們就是照著紅色箭頭方向一個個節點看左右的。)
![【Leetcode】python - [104] Maximum Depth of Binary Tree 個人手繪解法筆記](/images/restored/2021/04/img_7771-1-1024x663.webp)
基本的確認,我們先確認有沒有這棵樹
總是會有一些要多考慮的事情… 沒有樹的話我們要先處理
(很討厭這種整個算法幾乎都寫對,結果錯「最簡單現象」的感覺XDD)
![【Leetcode】python - [104] Maximum Depth of Binary Tree 個人手繪解法筆記](/images/restored/2021/04/img_7769-1-1024x768.webp)
一層層的遍歷,每個節點左右都看一下
每一層遍歷各節點的左右,這邊可以抓一個感覺,
樹的成長 (level),大概是照著 1 -> 2 -> 4 -> 8 -> 16
這樣的數值在快速變化的。
![【Leetcode】python - [104] Maximum Depth of Binary Tree 個人手繪解法筆記](/images/restored/2021/04/img_7770-1-1024x828.webp)
個人範例程式碼 - 一刷 (2021/04/02)
class Solution:
def maxDepth(self, root: TreeNode) -> int:
depth = 0
if root:
level = [root]
else:
level = []
while(level):
depth += 1
next_level = []
for ele in level:
if ele.left:
next_level.append(ele.left)
if ele.right:
next_level.append(ele.right)
level = next_level
return depth
![Featured image of post 【Leetcode】python - [104] Maximum Depth of Binary Tree 個人手繪解法筆記](/images/restored/2021/04/img_7770-1-1024x828.jpg)