好的,我給你講 廣度優先搜索(BFS, Breadth-First Search),并配一個直觀例子。
1?? 什么是廣度優先
廣度優先搜索的特點:
按層訪問:先訪問根節點,然后訪問它的直接子節點,再訪問子節點的子節點……
使用隊列(FIFO):保證先入隊的節點先訪問。
常用于:層序遍歷二叉樹、最短路徑搜索、圖的遍歷等。
核心思想:先訪問“廣度”(當前層)再訪問“深度”(下一層)。
2?? 舉例:二叉樹層序遍歷
假設有二叉樹:
1/ \2 3/ \ \4 5 6
用列表表示為:
[1, 2, 3, 4, 5, None, 6]
BFS 遍歷過程
初始隊列:
queue = [1]
訪問
1
,加入結果[1]
將左右子節點
2
和3
入隊
queue = [2, 3]
訪問第二層:
訪問
2
→ 結果[2]
,入隊4
和5
訪問
3
→ 結果[2, 3]
,入隊右子節點6
queue = [4, 5, 6]
訪問第三層:
訪問
4, 5, 6
→ 結果[4, 5, 6]
沒有子節點,隊列為空,結束
最終層序遍歷結果:
[[1], [2, 3], [4, 5, 6]]
? 可以看到,先訪問每一層的所有節點,再進入下一層,這就是 BFS。
如果你愿意,我可以幫你畫一張 隊列推進示意圖,讓你一眼就能看懂每一步隊列里存的節點和訪問順序,非常直觀。
你想讓我畫嗎?