算法常識——樹的遍歷

前言

樹的遍歷分爲:
1.深度優先遍歷
2.廣度優先遍歷
深度優先遍歷:
1.前序遍歷
2.中序遍歷
3.廣序遍歷
廣度優先遍歷:
層序遍歷blog

深度優先遍歷

如圖:
排序

前序遍歷

前序遍歷的規則爲:根節點、左子樹、右子樹
根據規則,第一個點即爲根節點:

第一個爲A。
A 有左子樹:左子樹的第一個節點又爲左子樹的根節點,因此爲AB

接下來,B沒有左子樹,根據規則根節點、左子樹、右子樹,第三優先級爲右子樹。

c右子樹的根節點爲C,因此爲ABC,而後C有左子樹,且根節點爲D,結果爲ABCD。
A的左子樹就遍歷完畢了,接下來遍歷A的右子樹。
A的右子樹的根節點爲E,結果爲ABCDE。在E右子樹中,E沒有左子樹,因此遍歷右子樹,E右子樹的根節點爲F,因此結果爲ABCDEF。
F子樹有G左子樹,G爲根節點,結果爲ABCDEFG。G子樹有左子樹,因此結果爲ABCDEFG,而後H爲葉子節點,回到G上,G有右子樹,且只有一個右根節點K,結果爲ABCDEFGHK。隊列

中序遍歷

中序遍歷比較重要,規則爲:左子樹,根節點,右子樹。
一切都是從根節點開始的。
從A開始,由於A有B左子樹,因此A不是第一個點。
B子樹沒有左子樹,因此B爲根節點,結果爲B。

B子樹的根節點遍歷完畢,就到右子樹了。右子樹C有左節點,D子樹只有根節點,結果爲:BD。
而後回到C子樹,C遍歷了左子樹,那麼優先級爲根節點,根節點爲C,結果爲BDC。
B子樹就遍歷完畢了。A的左子樹遍歷完畢,優先級爲根節點,根節點爲A,結果爲BDCA。
A子樹的左子樹與根節點遍歷完畢,那麼優先級爲右子樹。
右子樹的根節點爲E,E沒有左子樹,優先級爲根節點,那麼結果爲BDCAE。
E的左子樹,根節點遍歷完畢,那麼開始遍歷F右子樹。
F右子樹,有左子樹,G左子樹。G又有H左子樹,且H左子樹只有根節點——H,結果爲:BDCAEH。
而後回到了G,G的左子樹遍歷完畢,G爲G左子樹的根節點,結果爲:BDCAEHG。同理,G子樹沒有了左子樹,根節點,結果爲:BDCAEHGK。
回到了F子樹,F子樹的左子樹遍歷完畢,優先級爲F,結果爲:BDCAEHGKF。原理

後序遍歷

規則:左子樹,右子樹,根節點
同理,結果爲:DCBHKGFEA。遍歷

廣度優先遍歷

層序遍歷

咱們知道其實一切都是從根節點開始,在這裏是A。
在這種排序遍歷中,和一個隊列有關。
先將A進入隊列,隊列中爲:A;
而後A出隊列,輸出A,左右子樹的B,E進入隊列,隊列中爲:BE。
而後B出隊列,輸出AB,C進入隊列,隊列中爲:EC。
而後E出隊列,輸出爲ABE,F進入隊列,隊列中爲:CF。
而後c出隊列,輸入爲ABEC,D進入隊列,隊列中爲:FD。
而後F出隊列,輸入爲ABECF,G進入隊列,隊列爲:DG.
而後D出隊列,而後輸入爲ABECFD,隊列爲:G
而後G出隊列,而後輸入爲ABECFDG,隊列爲:HK
而後HK分別出隊列,輸出爲ABECFDGHK。
這種原理很是簡單,就是每一個都會遍歷到,將其子節點找出。im

總結

其實遍歷關鍵之處在於能遍歷完,至於怎麼遍歷呢,就是一個純粹的思考過程。總結

相關文章
相關標籤/搜索