樹的前序遍歷、中序遍歷、后序遍歷詳解


1.前序遍歷

圖1

對於當前節點,先輸出該節點,然后輸出他的左孩子,最后輸出他的右孩子。以上圖為例,遞歸的過程如下:
(1):輸出 1,接着左孩子;
(2):輸出 2,接着左孩子;
(3):輸出 4,左孩子為空,再接着右孩子;
(4):輸出 6,左孩子為空,再接着右孩子;
(5):輸出 7,左右孩子都為空,此時 2 的左子樹全部輸出,2 的右子樹為空,此時 1 的左子樹全部輸出,接着 1 的右子樹;
(6):輸出 3,接着左孩子;
(7):輸出 5,左右孩子為空,此時 3 的左子樹全部輸出,3 的右子樹為空,至此 1 的右子樹全部輸出,結束。

2.中序遍歷

對於當前結點,先輸出它的左孩子,然后輸出該結點,最后輸出它的右孩子。以上圖為例:
(1):1-->2-->4,4 的左孩子為空,輸出 4,接着右孩子;
(2):6 的左孩子為空,輸出 6,接着右孩子;
(3):7 的左孩子為空,輸出 7,右孩子也為空,此時 2 的左子樹全部輸出,輸出 2,2 的右孩子為空,此時 1 的左子樹全部輸出,輸出 1,接着 1 的右孩子;
(4):3-->5,5 左孩子為空,輸出 5,右孩子也為空,此時 3 的左子樹全部輸出,而 3 的右孩子為空,至此 1 的右子樹全部輸出,結束。

3.后序遍歷

對於當前結點,先輸出它的左孩子,然后輸出它的右孩子,最后輸出該結點。依舊以上圖為例:
(1):1->2->4->6->7,7 無左孩子,也無右孩子,輸出 7,此時 6 無左孩子,而 6 的右子樹也全部輸出,輸出 6,此時 4 無左子樹,而 4 的右子樹全部輸出,輸出 4,此時 2 的左子樹全部輸出,且 2 無右子樹,輸出 2,此時 1 的左子樹全部輸出,接着轉向右子樹;
(2):3->5,5 無左孩子,也無右孩子,輸出 5,此時 3 的左子樹全部輸出,且 3 無右孩子,輸出 3,此時 1 的右子樹全部輸出,輸出 1,結束。

4.根據前序遍歷中序遍歷推導樹的結構

已知:
前序遍歷: GDAFEMHZ
中序遍歷: ADEFGHMZ
求后序遍歷
首先,要先畫出這棵二叉樹,怎么畫呢?根據上面說的我們一步一步來……
1.先看前序遍歷,前序遍歷第一個一定是根節點,那么我們可以知道,這棵樹的根節點是G,接着,我們看中序遍歷中,根節點一定是在中間訪問的,那么既然知道了G是根節點,則在中序遍歷中找到G的位置,G的左邊一定就是這棵樹的左子樹,G的右邊就是這棵樹的右子樹了。
2.我們根據第一步的分析,大致應該知道左子樹節點有:ADEF,右子樹的節點有:HMZ。同時,這個也分別是左子樹和右子樹的中序遍歷的序列。
3.在前序遍歷遍歷完根節點后,接着執行前序遍歷左子樹,注意,是前序遍歷,什么意思?就是把左子樹當成一棵獨立的樹,執行前序遍歷,同樣先訪問左子樹的根,由此可以得到,左子樹的根是D,第2步我們已經知道左子樹是ADEF了,那么在這一步得到左子樹的根是D,請看第4步。
4.從第2步得到的中序遍歷的節點序列中,找到D,發現D左邊只有一個A,說明D的左子樹只有一個葉子節點,D的右邊呢?我們可以得到D的右子樹有EF,再看前序遍歷的序列,發現F在前,也就是說,F是先前序遍歷訪問的,則得到E是F的左子樹,只有一個葉子節點。
5.到這里,我們可以得到這棵樹的根節點和左子樹的結構了。如下圖:

6.接着看右子樹,在第2步的右子樹中序遍歷序列中,右子樹是HMZ三個節點,那么先看前序遍歷的序列,先出現的是M,那么M就是右子樹的根節點,剛好,HZ在M的左右,分別是它的左子樹和右子樹,因此,右子樹的結構就出來了:


7.到這里,我們可以得到整棵樹的結構:

5.根據樹的中序遍歷后序遍歷推導樹的結構

中序遍歷:ADEFGHMZ
后序遍歷:AEFDHZMG

1..根據后序遍歷的特點(左右中),根節點在結尾,確定G是根節點。根據中序遍歷的特點(左中右),確定ADEF組成左子樹,HMZ組成右子樹。

2.分析左子樹。ADEF這四個元素在后序遍歷(左右中)中的順序是AEFD,在中序遍歷(左中右)中的順序是ADEF。根據后序遍歷(左右中)的特點確定D是左子樹的節點,根據中序遍歷(左中右)的特點發現A在D前面,所以A是左子樹的左葉子,EF則是左子樹的右分枝。
EF在后序(左右中)和中序(左中右)的相對位置是一樣的,所以EF關系是左右或者左中,排除左右關系(缺乏節點),所以EF關系是左中。
到此得出左子樹的形狀


3.分析右子樹。HMZ這三個元素在中序遍歷(左中右)的順序是HMZ,在后序遍歷(左右中)的順序是HZM。根據后序遍歷(左右中)的特點,M在尾部,即M是右子樹的節點。再根據中序遍歷(左中右)的特點,確定H(M的前面)是右子樹的左葉子,Z(M的后面)是右子樹的右葉子。

所以右子樹的形狀

  1. 最后得出整棵樹的形狀
原文地址:https://www.jianshu.com/p/1c50b23fcc30


免責聲明!

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



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