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

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. 最后得出整棵樹的形狀
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,983評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,772評論 3 422
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,947評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,201評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,960評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,350評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,406評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,549評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,104評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,914評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,089評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,647評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,340評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,753評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,007評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,834評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,106評論 2 375

推薦閱讀更多精彩內容