二叉樹 已知先序中序求後序的演算法

2021-06-06 01:04:51 字數 1182 閱讀 1274

tx和小公尺的筆試題都考到了。。。。。。。。

已知一棵二叉樹,其先序序列為:abdegmncfh,中序序列為:dbmgneachf,請畫出這棵二叉樹(給出過程),並給出其後序序列。
首先看先序(根左右),說明a是根,再看中序(左根右),說明a之前的(dbmgne)都是a的左邊,a之後的(chf)都在a的右邊。

在看先序的bdegmn 同樣是根左右,b就是a的左子節點,再看中序的dbmgne,同樣是左根右,d就是b的左孩子(而且左邊也只有這乙個)。。。。。。。

繼續看先序的egmn,同樣是根左右,e就是b的右孩子,

在看中序的mgne,左根右,說明e只有左邊,沒有右邊,

繼續看先序的gmn,根據根左右,g就是的左孩子,

再看中序的mgn,是左根右,說明m是g的左子樹,n是g的右字數。。。。。。。。。

#include int find(char c,char a,int s,int e) /* 找出中序中根的位置。 */

/* 其中pre表示先序序,pre_s為先序的起始位置,pre_e為先序的終止位置。 */

/* 其中in表示中序,in_s為中序的起始位置,in_e為中序的終止位置。 */

/* pronum()求出pre[pre_s~pre_e]、in[in_s~in_e]構成的後序序列。 */

void pronum(char pre,int pre_s,int pre_e,char in,int in_s,int in_e)

c=pre[pre_s]; /* c儲存根節點。 */

k=find(c,in,in_s,in_e); /* 在中序中找出根節點的位置。 */

pronum(pre,pre_s+1,pre_s+k-in_s,in,in_s,k-1); /* 遞迴求解分割的左子樹。 */

pronum(pre,pre_s+k-in_s+1,pre_e,in,k+1,in_e); /* 遞迴求解分割的右子樹。 */

printf("%c",c); /* 根節點輸出。 */

}main()

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

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

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

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

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

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