深度優先遍歷:對每乙個可能的分支路徑深入到不能再深入為止,而且每個結點只能訪問一次。要特別注意的是,二叉樹的深度優先遍歷比較特殊,可以細分為先序遍歷、中序遍歷、後序遍歷(我們前面使用的是先序遍歷)。具體說明如下:
先序遍歷:對任一子樹,先訪問根,然後遍歷其左子樹,最後遍歷其右子樹。
中序遍歷:對任一子樹,先遍歷其左子樹,然後訪問根,最後遍歷其右子樹。
後序遍歷:對任一子樹,先遍歷其左子樹,然後遍歷其右子樹,最後訪問根。
分析
深度優先搜素演算法:不全部保留結點,占用空間少;有回溯操作(即有入棧、出棧操作),執行速度慢。
廣度優先搜尋演算法:保留全部結點,占用空間大; 無回溯操作(即無入棧、出棧操作),執行速度快。
通常深度優先搜尋法不全部保留結點,擴充套件完的結點從資料庫中彈出刪去,這樣,一般在資料庫中儲存的結點數就是深度值,因此它占用空間較少。
廣度優先搜尋演算法,一般需儲存產生的所有結點,占用的儲存空間要比深度優先搜尋大得多,因此,程式設計中,必須考慮溢位和節省記憶體空間的問題。
但廣度優先搜尋法一般無回溯操作,即入棧和出棧的操作,所以執行速度比深度優先搜尋要快些
dfs和bfs的區別
詳見 部落格 回溯法是一種搜尋法,按條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法 例如這張圖,從1開始到2,之後到5,5不能再走了,退回2,到6,退回2退回1,到3,一直進行 void dfs int deep 這裡可能...
DFS與BFS之間的區別
一般來說用dfs解決的問題都可以用bfs來解決。dfs 深搜的同時考慮回溯 bfs 佇列,入佇列,出佇列 dfs 棧,壓棧,出棧 bfs是按一層一層來訪問的,所以適合有目標求最短路的步數,你想想層層搜尋每次層就代表了一步。bfs優先訪問的是兄弟節點,只有這一層全部訪問完才能訪問下一層,也就是說bfs...
BFS和DFS的簡要分析
廣度優先搜尋 bfs 可以被形象的描述為 淺嘗輒止 具體一點就是每個頂點只訪問它的鄰接節點 如果它的鄰接節點沒有被訪問 並且記錄這個鄰接節點,當訪問完它的鄰接節點之後就結束這個頂點的訪問。廣度優先用到了 先進先出 佇列,通過這個佇列來儲存第一次發現的節點,以便下一次的處理 而對於再次發現的節點,我們...