【算法】深度優先與廣度優先

一、區別算法

       1) 二叉樹的深度優先遍歷的非遞歸的通用作法是採用棧,廣度優先遍歷的非遞歸的通用作法是採用隊列。數據庫

       2) 深度優先遍歷:對每個可能的分支路徑深刻到不能再深刻爲止,並且每一個結點只能訪問一次。要特別注意的是,二叉樹的深度優先遍歷比較特殊,能夠細分爲先序遍歷、中序遍歷、後序遍歷。具體說明以下:設計

  • 先序遍歷:對任一子樹,先訪問根,而後遍歷其左子樹,最後遍歷其右子樹。
  • 中序遍歷:對任一子樹,先遍歷其左子樹,而後訪問根,最後遍歷其右子樹。
  • 後序遍歷:對任一子樹,先遍歷其左子樹,而後遍歷其右子樹,最後訪問根。

        廣度優先遍歷:又叫層次遍歷,從上往下對每一層依次訪問,在每一層中,從左往右(也能夠從右往左)訪問結點,訪問完一層就進入下一層,直到沒有結點能夠訪問爲止。   遞歸

     3)深度優先搜素算法:不所有保留結點,佔用空間少;有回溯操做(即有入棧、出棧操做),運行速度慢。隊列

          廣度優先搜索算法:保留所有結點,佔用空間大; 無回溯操做(即無入棧、出棧操做),運行速度快。內存

          一般 深度優先搜索法不所有保留結點,擴展完的結點從數據庫中彈出刪去,這樣,通常在數據庫中存儲的結點數就是深度值,所以它佔用空間較少。程序設計

二、結論擴展

因此,當搜索樹的結點較多,用其它方法易產生內存溢出時,深度優先搜索不失爲一種有效的求解方法。  二叉樹

廣度優先搜索算法,通常需存儲產生的全部結點,佔用的存儲空間要比深度優先搜索大得多,所以,程序設計中,必須考慮溢出和節省內存空間的問題。搜索

但廣度優先搜索法通常無回溯操做,即入棧和出棧的操做,因此運行速度比深度優先搜索要快些

相關文章
相關標籤/搜索