已知二叉樹後序遍歷序列是dabec,中序遍歷序列debac

2021-06-13 06:36:59 字數 1462 閱讀 7241

1樓:左清安賽辛

中序遍歷:debac

後序遍歷:dabec

推導如下:

1、從後序可知樹根為c,因為最後的節點是樹根。

2、從中序的規則可知樹根在中間,樹根的左邊是左孩子,右邊是右孩子。很明顯樹根c是沒有右孩子,只有左孩子deba。

中序遍歷:deba

後序遍歷:dabe

推出e是左子樹的根結點,並且存在左子樹d,右子樹ba,因為從中序遍歷可知e的左邊是d,右邊是ba

中序遍歷:ba

後序遍歷:ab

推出b是右子樹的根結點,並且存在右子樹,但沒有左子樹,因為從中序遍歷可知b只有右子樹,沒有左子樹。

還原二叉樹如下圖:

前序為:cedba

推導的方法只需記住下面的規則即可,然後逐步分割法,就像我上面那樣推導。拿到左右子樹反覆套用下面的遍歷規則,很快就可以還原一棵完整的樹。

1.先序遍歷:根、左、右

2.中序遍歷:左、根、右

3.後序遍歷:

左、右、根

2樓:解蕊慎水

選d首先看後續遍歷,最後的c是二叉樹的根節點,然後看中序遍歷,最後一個又是c,所以這個二叉樹根節點沒有右子樹。

c的位置得到後,再看後續遍歷,e在c前面,所以e是c的左孩子節點,e的位置得到。

然後再看中序遍歷,e前面只有一個d,所以d是e的左孩子節點,d的位置得到;剩下的b和a就在e的右子樹。

然後再看後序遍歷,dabec,d是一個葉子節點,那麼就還有一個葉子節點,那麼這個節點就一定是a,那麼b就是e的右孩子節點,最後再結合中序遍歷就可得出所表示得二叉樹。(如果這步沒看懂,可以在前面得基礎上一個一個的試,也不麻煩,就四種可能,最後只有一個是符合的)

3樓:匿名使用者

cedba,過程我要想一想,反正除了知道前序和後序,求中序,都是唯一解

4樓:

由後序(左子樹,右子樹,根節點)dabec知道根節點為c,再通過中序(左子樹,根節點,右子樹)知道右子樹為空

接著由dabe知道其根節點為e,所以在中序deba中左子樹為d右子樹為ba

再來,後序ab,中序ba,b為節點,a為右子樹前序遍歷序列為cedba

----c

---/

--e-/--\

d ----b

-------\

---------a

5樓:詹靖連依辰

前序:根左右

中序:左根右

後序:左右根

```````````````````c/e/\db

\a前序:cedba

已知二叉樹後序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是? a acbed

6樓:萢萢

選d。由後序遍歷可知c是根結點,符合條件的只有d。

二叉樹遍歷,二叉樹的遍歷到底是怎麼遍歷的啊?

中序 先遍歷左子樹 就是245組成的那棵樹 遍歷245時也是中序 就是 425 然後走根節點 1 然後遍歷右子樹 637 連起來就是4251637 這種問題。多看幾遍書就好了吧 中序是左中右順序遍歷。把每個點都看成頭結點然後左走,遇節點就遍歷左子樹,等左邊空了,就訪問當前節點的父節點,也就是中,寫下...

怎樣建立二叉樹實現二叉樹的先序中序後序和遍歷

include define n 100 typedef struct node btnode 二叉樹的建立 btnode createbintree return t 先序遍歷演算法 void preorder btnode t 中序遍歷演算法 遞迴演算法 void inorder btnode ...

建立一棵二叉樹,並對其進行遍歷(先序 中序 後序),列印輸出

只有先序遍歷,其它的可以在這個基礎上改。如果有不懂的可以hi我 include include typedef struct tnode tnode tnode tree creat tnode t return t void preorder tnode t void main 二叉樹的建立與遍歷...