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


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

 

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

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

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

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

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

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

前序遍歷

前序遍歷(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM