Python 題目

PROBLEM

樹的遍歷與操作筆記

一題一題刷

目錄

  1. 深度優先搜尋 (DFS)

  2. 廣度優先搜尋 (BFS)

  3. 樹的屬性計算


重要觀念整理

1. 資料結構選擇

演算法資料結構原因
DFS遞迴 / Stack需要回溯到上一層節點
BFSQueue需要按層級順序處理

2. 節點類型判斷

if parent[id] == -1:
    # 根節點:沒有父節點
    types = "root"
elif len(tree[id]) > 0:
    # 內部節點:有子節點
    types = "internal node"
else:
    # 葉節點:沒有子節點
    types = "leaf"

3. 深度與高度的計算

4. defaultdict 的使用

from collections import defaultdict
tree = defaultdict(list)

好處:


時間複雜度分析

操作時間複雜度說明
DFS 遍歷O(V + E)每個節點和邊都訪問一次
BFS 遍歷O(V + E)每個節點和邊都訪問一次
計算深度/高度O(V + E)使用 DFS 遍歷一次

其中 V 是節點數,E 是邊數。對於樹來說,E = V - 1。


常見應用

DFS 適用場景

BFS 適用場景