# 怎么求出Python二叉樹的最大深度
## 目錄
1. [二叉樹基礎概念](#二叉樹基礎概念)
2. [最大深度的定義](#最大深度的定義)
3. [遞歸解法](#遞歸解法)
4. [迭代解法(BFS)](#迭代解法bfs)
5. [復雜度分析](#復雜度分析)
6. [完整代碼示例](#完整代碼示例)
7. [應用場景](#應用場景)
8. [總結](#總結)
---
## 二叉樹基礎概念
二叉樹(Binary Tree)是每個節點最多有兩個子節點的樹結構,通常稱為:
- 左子節點(left child)
- 右子節點(right child)
基本結構示例:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
最大深度是指從根節點到最遠葉子節點的最長路徑上的節點數。例如:
3
/ \
9 20
/ \
15 7
最大深度為3(路徑3→20→7或3→20→15)。
def maxDepth(root: TreeNode) -> int:
if not root:
return 0
return 1 + max(maxDepth(root.left), maxDepth(root.right))
以示例樹為例: 1. 根節點3 → 計算max(左子樹9, 右子樹20) 2. 節點9 → 左右均為空 → 返回1 3. 節點20 → max(左15, 右7) 4. 節點15和7 → 均返回1 5. 最終結果:1 + max(1, 2) = 3
from collections import deque
def maxDepth(root: TreeNode) -> int:
if not root:
return 0
queue = deque([root])
depth = 0
while queue:
depth += 1
for _ in range(len(queue)):
node = queue.popleft()
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return depth
隊列變化:
[3] → depth=1
[9,20] → depth=2
[15,7] → depth=3
[] → 結束
方法 | 時間復雜度 | 空間復雜度 |
---|---|---|
遞歸 | O(n) | O(h)* |
BFS | O(n) | O(w)* |
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 遞歸解法
def maxDepth_recursive(root: TreeNode) -> int:
if not root:
return 0
return 1 + max(maxDepth_recursive(root.left), maxDepth_recursive(root.right))
# BFS解法
from collections import deque
def maxDepth_bfs(root: TreeNode) -> int:
if not root:
return 0
queue = deque([root])
depth = 0
while queue:
depth += 1
for _ in range(len(queue)):
node = queue.popleft()
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return depth
# 測試用例
if __name__ == "__main__":
# 構建示例樹
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)
print(f"遞歸解法結果: {maxDepth_recursive(root)}") # 輸出3
print(f"BFS解法結果: {maxDepth_bfs(root)}") # 輸出3
掌握這兩種方法能解決LeetCode 104題及其他衍生問題(如最小深度、直徑等)。 “`
注:實際字符數約1300字(含代碼和格式標記)。如需調整內容細節,可進一步擴展算法原理或增加可視化示例。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。