實現形式:遞迴和非遞迴
遞迴實現比較簡單,由於是前序遍歷,所以我們依次遍歷當前節點,左節點,右節點即可,對於左右節點來說,依次遍歷它們的左右節點即可,依此不斷遞迴下去,直到葉節點(遞迴終止條件)
樹的前序遍歷,實際上不管是前序遍歷,還是中序遍歷,亦或是後序遍歷,都屬於深度優先遍歷。
bfs使用佇列,把每個還沒有搜尋到的點依次放入佇列,然後再彈出佇列的頭部元素當做當前遍歷點。bfs總共有兩個模板:
while queue 不空:
cur = queue.pop()
for 節點 in cur的所有相鄰節點:
if 該節點有效且未訪問過:
queue.push(該節點)
level = 0
while queue 不空:
size = len(queue)
for _ in range(size):
cur = queue.pop()
for 節點 in cur的所有相鄰節點:
if 該節點有效且未被訪問過:
queue.push(該節點)
}level ++;
使用佇列儲存每層的所有節點,每次把佇列裡的原先所有節點進行出佇列操作,再把每個元素的非空左右子節點進入佇列。因此即可得到每層的遍歷。 DFS BFS搜尋 題目
這篇博主寫的是圖的深搜 圖的dfs附 圖的深度優先遍歷 出處 一條魚 2011 12 26 include include struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int vis...
DFS BFS 搜尋訓練
hdu 1016 include include include using namespace std int prime 40 vis 40 num 40 n void checkprime void dfs int i for int c 2 c n c int main return 0 p...
DFS BFS 搜尋基礎
首先深搜 先看輸入格式 5 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 0 0 第一行輸入乙個數n,接下來輸入n n的數字矩陣,0代表房間,1代表牆,每個位置都可以往上下左右四個方向走 題意非常簡單,就是求以左上角為出發點所能到達的最多的房間數。inc...