還原二叉樹 已知先序中序或者後序中序

2021-10-23 16:11:52 字數 1921 閱讀 4588

首先,我們看看前序、中序、後序遍歷的特性:

前序遍歷:

1.訪問根節點

2.前序遍歷左子樹

3.前序遍歷右子樹

(個人覺得這個命名略微有誤導性,因為前序的「前」容易讓人誤會成樹的最前邊(視覺上的左邊)。記住前序遍歷就是最直接(直覺上的)遍歷——中左右)

中序遍歷:

1.中序遍歷左子樹

2.訪問根節點

3.中序遍歷右子樹

(同樣是有誤導性的名字。 遍歷順序——左中右)

後序遍歷:

1.後序遍歷左子樹

2.後序遍歷右子樹

3.訪問根節點

(同樣是有誤導性的名字,「後」字沒有任何意義,所有二叉樹的遍歷,左邊一定在右邊的之前進行遍歷。 遍歷順序——左右中。)

最近又想出乙個幫助記憶的方法——把先/中/後 當做是「中」的訪問時序。如 先序 就是 「中」排在最前面(中左右),以此類推。

接著,銘記總的方針

找到根節點,確定左子樹,確定右子樹 (最重要)

對左子樹進行遞迴分析

3.對右子樹進行遞迴分析

一、已知先序、中序遍歷,求後序遍歷

例:先序遍歷:         gdafemhz

中序遍歷:         adefghmz

思路分析:

根據先序遍歷的特點——中左右,第乙個元素一定是根節點,所以立刻確定g是根節點。

既然確定了g是根節點,再根據中序遍歷的特點——左中右,在根節點g之前的adef就是左子樹,根節點g之後的hmz就是右子樹。

3.接著分析左子樹(思路和第1,2步一樣)。把左子樹的所有元素(即adef這四個元素)在先序遍歷和中序遍歷中的順序拿出來進行比較。

先序的順序是dafe(中左右),中序遍歷是adef(左中右)。

通過先序特點得出d是左子樹的節點,通過中序特點確定唯一乙個在d左邊的a是左子樹中的左葉子,右邊的是ef。

觀察ef的相對位置,在先序(中左右)是fe,在中序(左中右)ef,所以得出ef的關係是左中。

到此得出左子樹的形狀

4.接著分析右子樹(思路和第1,2步一樣),把右子樹的元素(hmz)在先序遍歷和中序遍歷中的順序拿出來進行比較。

先序的順序是mhz(中左右),中序遍歷是hmz(左中右)。

根據先序遍歷的特點確定m是右子樹的節點,根據中序遍歷的特點確定h是左葉,z是右葉。

所以右子樹的形狀

5.於是得出了整棵樹的形狀

那麼後序遍歷就是aefdhzmg

二、已知中序和後序遍歷,求前序遍歷

中序遍歷:       adefghmz

後序遍歷:       aefdhzmg

思路分析:(記住方針是一樣的)

1.根據後序遍歷的特點(左右中),根節點在結尾,確定g是根節點。根據中序遍歷的特點(左中右),確定adef組成左子樹,hmz組成右子樹。

2.分析左子樹。adef這四個元素在後序遍歷(左右中)中的順序是aefd,在中序遍歷(左中右)中的順序是adef。根據後序遍歷(左右中)的特點確定d是左子樹的節點,根據中序遍歷(左中右)的特點發現a在d前面,所以a是左子樹的左葉子,ef則是左子樹的右分枝。

ef在後序(左右中)和中序(左中右)的相對位置是一樣的,所以ef關係是左右或者左中,排除左右關係(缺乏節點),所以ef關係是左中。

到此得出左子樹的形狀

分析右子樹。hmz這三個元素在中序遍歷(左中右)的順序是hmz,在後序遍歷(左右中)的順序是hzm。根據後序遍歷(左右中)的特點,m在尾部,即m是右子樹的節點。再根據中序遍歷(左中右)的特點,確定h(m的前面)是右子樹的左葉子,z(m的後面)是右子樹的右葉子。

所以右子樹的形狀

最後得出整棵樹的形狀

那麼先序遍歷就是gdafemhz .

三、已知前序、後序遍歷,求中序遍歷

這種情況,可能無法還原出唯一的二叉樹,因為無法唯一確定根節點的左右子樹。

(其實還不大清楚具體的證明和原因,歡迎指教)

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

在做資料結構面試題的時候我們會經常發現有關二叉樹的題目總是這樣的 栗子 已知某二叉樹先序為 中序為 求後序 已知某二叉樹中序為 後序為 求先序 需要注意的是 我們只能夠通過已知先序中序求後序或已知中序後序求先序,而不能夠已知先序和後序求中序 下面總結一下兩種題的做法 首先回顧知識點 第一種 已知乙個...

已知中序與後序,或者中序與先序,構造二叉樹

name 已知中序與後序,或者中序與先序,構造二叉樹 author goal00001111 date 08 12 08 11 42 description 描述 description 給出一棵二叉樹的中序與後序排列。求出它的先序排列。給出一棵二叉樹的中序與先序排列。求出它的後序排列。includ...

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

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