二叉樹已知先序中序求後序 已知中序後序求先序

2021-07-15 21:10:30 字數 2093 閱讀 6643

在做資料結構面試題的時候我們會經常發現有關二叉樹的題目總是這樣的

栗子:

已知某二叉樹先序為……中序為……求後序

已知某二叉樹中序為……後序為……求先序

需要注意的是(我們只能夠通過已知先序中序求後序或已知中序後序求先序,而不能夠已知先序和後序求中序

下面總結一下兩種題的做法

首先回顧知識點

第一種

已知乙個二叉樹的先序遍歷結果為:abcdefgh,中序遍歷結果為bdceafhg,求該二叉樹的後序遍歷。

思路:拿到這樣的題,我們要先根據兩種遍歷順序把原始二叉樹畫出來,然後再根據後序遍歷的規則解出後序遍歷。

解析:首先看先序遍歷的第乙個結點為a,那麼根據先序遍歷規則先訪問根結點,那麼a肯定是根結點了。然後根據中序遍歷規則先訪問左子樹中間訪問根結點。那麼我們可以得出bcde是根結點a的左子樹fhg是根結點a的右子樹。那麼左子樹bcde當中又怎麼排序呢?這個時候我們再來看先序遍歷,a結點之後先序先遍歷b,說明b一定是根結點a左子樹的根結點。如下圖

然後我們再看中序遍歷,b是第乙個,說明b結點沒有左子樹,cde是b的右子樹,然後我們想知道cde如何排序,再次看先序遍歷,這個時候先序遍歷ab已經排出來。過來是c,說明c是b結點右子樹的根結點。可以畫出下圖

接下來我們再次看中序遍歷,中序遍歷b接下來是d,而且我們已經知道c是b右字數的根結點,那麼我們根據中序先訪問左子樹然後訪問根結點,就知道d是c結點的左子樹。那麼e理所當然應該是c結點的右子樹。可以畫出如下圖

這樣我們的左子樹就畫好了,接下來處理fgh。我們看到f在先序和中序中都先出現,我們就可以確定f是右子樹的根結點,並且f沒有左子樹。接下來先序出現的是g,而中序中g是最後出現的。所以g是f右子樹的根結點而h是g的左子樹。這樣我們就確定了原始樹的樣子如下圖

最後一步:

得知原始樹

我們按照後序遍歷的規則,先訪問左子樹再訪問右子樹最後訪問根結點

可以得到後續遍歷的順序為decbhgfa

哈哈,學會了先序中序求後序,我們再看第二種,已知中序後序求先序

直接上題目

第二種

已知乙個二叉樹的中序遍歷結果為: bdace,後序遍歷結果為 dbeca,求該二叉樹的先序遍歷。

按照第一題的做法,首先我們知道後序遍歷最後遍歷根結點,所以a結點一定是這棵樹的根結點,然後我們再開中序遍歷的結果,a結點是根結點,所以bd是a結點的左子樹,ce是根結點的右子樹。先看bd。根據中序先遍歷左子樹然後遍歷根結點最後遍歷右子樹順序為bd,而後序先遍歷左子樹再遍歷右子樹最後遍歷根結點順序為db。所以可以推出b是a的左子樹的根結點,且b沒有左子樹,b的右子樹是d。可畫出下圖

接下來我們來看a的右子樹。剩下ec兩個結點,我們再次看中序與後序遍歷的結果。根據中序先遍歷左子樹然後遍歷根結點最後遍歷右子樹順序為ce,而後序先遍歷左子樹再遍歷右子樹最後遍歷根結點順序為ec。則我們可以推出c應該是a結點右子樹的根結點,而e應該是c結點的右子樹。這樣我們就可以畫出原始樹如下圖

根據原始樹,我們可以按照先序遍歷的順序得到先序遍歷結果:abdce

總結:掌握先中後遍歷的規則,然後結合先中或者中後以及遍歷規則畫出原始樹,然後根據原始樹求出先序或者後序!!

二叉樹 已知先序和中序求後序,已知中序和後序求先序

樹的三種遍歷方式的遍歷順序 先序遍歷 根 左子樹 右子樹 特點 第乙個元素為根 中序遍歷 左子樹 根 右子樹 特點 根的兩邊分別為左子樹和右子樹 後序遍歷 左子樹 右子樹 根 特點 最後乙個元素為根 有如下圖的二叉樹 其先序 中序 後序遍歷分別為 dbacegf abcdefg acbfged。1 ...

二叉樹遍歷(已知先序 中序求後序)

時間限制 1000 ms 記憶體限制 65536 kb 提交數 11 通過數 9 輸入一棵二叉樹的先序和中序遍歷序列,輸出其後序遍歷序列。共兩行,第一行乙個字串,表示樹的先序遍歷,第二行乙個字串,表示樹的中序遍歷。樹的結點一律用小寫字母表示。一行,表示樹的後序遍歷序列。abdec dbeac deb...

已知二叉樹先序和中序,求後序。

從處 一 已知前序 中序遍歷,求後序遍歷 例 前序遍歷 gdafemhz 中序遍歷 adefghmz 畫樹求法 第一步,根據前序遍歷的特點,我們知道根結點為g 第二步,觀察中序遍歷adefghmz。其中root節點g左側的adef必然是root的左子樹,g右側的hmz必然是root的右子樹。第三步,...