c++中二叉樹的先序中序後序遍歷

c++中二叉樹的先(前)序、中序、後序遍歷 講解版c++

 

首先先看一個遍歷的定義(源自度娘):算法

所謂遍歷(Traversal),是指沿着某條搜索路線,依次對樹中每一個結點均作一次且僅作一次訪問。訪問結點所作的操做依賴於具體的應用問題。 遍歷是二叉樹上最重要的運算之一,是二叉樹上進行其它運算之基礎。固然遍歷的概念也適合於多元素集合的狀況,如數組。數組

樹的遍歷是樹的一種重要的運算。所謂遍歷是指對樹中全部結點的信息的訪問,即依次對樹中每一個結點訪問一次且僅訪問一次。樹的3種最重要的遍歷方式分別稱爲前序遍歷、中序遍歷和後序遍歷。以這3種方式遍歷一棵樹時,若按訪問結點的前後次序將結點排列起來,就可分別獲得樹中全部結點的前序列表、中序列表和後序列表。相應的結點次序分別稱爲結點的前序、中序和後序。3d

--------------------------------------------------------------------------------------------------------------------------blog

固然,百度上給的解釋太專業,先看一個圖:遞歸

這是一顆二叉樹,它的遍歷。首先你要明確樹的基本組成:根結點、葉結點、父結點、子結點。基礎

前序遍歷百度

前序遍歷(DLR),是二叉樹遍歷的一種,也叫作先根遍歷、先序遍歷、前序周遊,可記作根左右。前序遍歷首先訪問根結點而後遍歷左子樹,最後遍歷右子樹。二叉樹

前序遍歷就是相似dfs的方式,從根結點一直從左子樹向下直到葉結點,而後返回到葉結點的父親,再從其父結點的右子樹向下。搜索

中序遍歷

中序遍歷(LDR)是二叉樹遍歷的一種,也叫作中根遍歷、中序周遊。在二叉樹中,先左後根再右。巧記:左根右。

中序遍歷是先訪問左兒子---父親---右兒子。

後序遍歷

後序遍歷(LRD)是二叉樹遍歷的一種,也叫作後根遍歷、後序周遊,可記作左右根。後序遍歷有遞歸算法和非遞歸算法兩種。在二叉樹中,先左後右再根。巧記:左右根。

後序遍歷是先訪問左兒子---右兒子---父親。

---------------------------------------------------------------------------------------------------------------------------------

總結

其實這三種遍歷方法差不了太多,前中後的意思是父結點的訪問順序不同,只是最後結果有些差異,沒有什麼特別須要這三種方法的題。只是輸入輸出和程序中爲了方便而起的名字。

 

 

小練習

對於這個圖,它的

前序遍歷:A---B---D---E---G---J---H---C---F---I---K---L

中序遍歷:D---B---J---G---E---H---A---C(f爲右結點)---K---I---L---F

後序遍歷:D---J---G---H---E---B---K---L---I---F---C---A

相關文章
相關標籤/搜索