1樓:老馮文庫
分析過程:
以下面的例題為例進行講解:
已知一棵二叉樹的先序遍歷序列和中序遍歷序列分別是abdgcefh、dgbaechf,求二叉樹及後序遍歷序列。
分析:先序遍歷序列的第乙個字元為根結點。對於中序遍歷,根結點在中序遍歷序列的中間,左邊部分是根結點的左子樹的中序遍歷序列,右邊部分是根結點的右子樹的中序遍歷序列。
先序:abdgcefh --> a bdg cefh
中序:dgbaechf --> dgb a echf
得出結論:a是樹根,a有左子樹和右子樹,左子樹有bdg結點,右子樹有cefh結點。
先序:bdg --> b dg
中序:dgb --> dg b
得出結論:b是左子樹的根結點,b無右子樹,有左子樹。
先序:dg --> d g
中序:dg --> d g
得出結論:d是b的左子樹的根結點,d無左子樹,有右子樹。
先序:cefh --> c e fh
中序:echf --> e c hf
得出結論:c是右子樹的根結點,c有左子樹(只有e結點),有右子樹(有fh結點)。
先序:fh --> f h
中序:hf --> h f
得出結論:f是c的左子樹的根結點,f有左子樹(只有h結點),無右子樹。
還原二叉樹為:
ab c
d e f
g h
後序遍歷序列:gdbehfca
2樓:
中序應該有點問題,畫不出來。 中序應是:
dbagechf
後序就是:
abcfhegd
某二叉樹的前序遍歷是abdgcefh,中序遍歷是dgbaechf,則起後序遍歷的結點訪問順序是什麼,為什麼? 20
3樓:匿名使用者
不太記得了,應該是
g d b a e h f c
二叉樹的3中遍歷,知道任何其中2種,就可以建立這個二叉樹。
自然就可以得到第3中的遍歷了。
具體方法可以翻書或網上查詢相關資料。
4樓:匿名使用者
前序是"根左右",由此可判斷a為根節點,再看中序:由於a為根,所以在中序中根據"左根右"原則a前的即為a的左子樹(dgb),右邊的即為右子樹(echf).再看左子樹:
由前序知b為左子樹的根節點,結合中序中dgb知,下級根節點只能為d,而g為最終d的右子樹,即左面的情況為(自下而上)g(右節)-d(根)-b(根)-a(根),這是用排除法得出的.再看右子樹:由相同的方法(根左右)知,右子樹的根為c,前序中為ce,中序為ec很明顯知e為c的左子樹而fh為c的右子樹,同樣根據fh與hf在前序和中序的情況可知,f為根而h為左子樹,即右子樹的情況為(自下而上):
h(左)-f(右根)-e(左根)-c(根)-a(總根).你要在題目中總結經驗和方法,找到這個規律就很簡單了.後序的正確順序應該是(左右根):
gdbhefca明白?行的話幫分.謝謝!!!
5樓:匿名使用者
gdbehfca
-----a
----/-\
---b---c
--/---/-\
-d---e---f
--\-----/
---g---h
已知二叉樹的後序遍歷序列和中序遍歷序列,怎樣求其前序遍歷序列?
6樓:美酒賓克斯
首先理解概念:
前序遍歷:訪問根結點的操作發生在遍歷其左右子樹之前。
中序遍歷:訪問根結點的操作發生在遍歷其左右子樹之中(間)。
後序遍歷:訪問根結點的操作發生在遍歷其左右子樹之後。
eg:後序遍歷為dbcefgha,中序遍歷為edcbahfg,求前序遍歷(網上例子)
解:首先 看後序遍歷dbcefgha,a為總根節點然後 尋找中序遍歷edcbahfg中a位置,則edcb在a的左枝,hfg在a的右枝;
重複前兩步,從後序遍歷最後一位找,在中序遍歷尋找對應點,得出左右分枝...
最後得到aecdbhgf,再自己驗證即可...
若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其後續遍歷的結點訪問順序是?
7樓:匿名使用者
嗯,你第一步的劃分是正確的
a為根,dgb為左子樹,echf為右子樹
接下來看左子樹的前序版遍歷為bdg
b首先被訪問
可以權知道b為左子樹的根,與a相連
再看左子樹的中序遍歷dgb
d和g都在b之前就被訪問
所以b和g應該在b的左子樹上
形狀如下
---a
--/--b
-/dg
而dg的確定再根據前序遍歷
d先被訪問
則d為根
再看中序遍歷也是d先被訪問
可以確定g為d的右子樹
左邊就可以確定出來了
如果上面看懂了
右邊就很簡單,一樣的道理
前序遍歷cefh
確定c為右子樹的根
再看中序遍歷echf
e為c的左子樹,hf為c的右子樹
hf的確定在看前序遍歷f先被訪問
f為根中序遍歷h先被訪問
h為f的左子樹
整棵樹就出來了
如下圖在做後序就是小菜一碟了
8樓:
依據前序抄遍歷的順序,得出a為根節bai點通過中序遍歷的順du
序確定a的左右子樹zhi
分別為bdg和cefh
再依次通過前序遍歷的順序和中
dao序遍歷的順序確定各子樹的分支,得原二叉樹為a/ \
b c
/ / \
d e f
\ /
g h
則其後序遍歷為gdbehfca選a
9樓:匿名使用者
給你個程式吧
知道 前序遍歷 和 中序遍歷 求 後續遍歷。
#include
using namespace std;
char a[20],b[20];
void work(char a,char b,int l)關鍵就是找到每專顆子樹的根節點屬,遞迴。
10樓:匿名使用者
做這種bai題目最好畫出圖
du形。
其實這題你把圖zhi畫出來就很容dao易懂了,這是根據前序,內中序遍容歷得出的圖。
a/ \
b c
/ / \
d e f/g
先序線索二叉樹的遍歷,後序線索二叉樹怎麼畫啊
include include typedef enum pointertag 指標標誌 typedef char datatype typedef struct bithretreebithretree bithretree pre 全域性變數,用於二叉樹的線索化 bithretree creat...
已知二叉樹的後序遍歷序列和中序遍歷序列,怎樣求其前序遍歷序列
首先理解概念 前序遍歷 訪問根結點的操作發生在遍歷其左右子樹之前。中序遍歷 訪問根結點的操作發生在遍歷其左右子樹之中 間 後序遍歷 訪問根結點的操作發生在遍歷其左右子樹之後。eg 後序遍歷為dbcefgha,中序遍歷為edcbahfg,求前序遍歷 網上例子 解 首先 看後序遍歷dbcefgha,a為...
某二叉樹的前序遍歷是abdgcefh,中序遍歷是dgbaechf,則起後序遍歷的結點訪問順序是什麼,為什麼
不太記得了,應該是 g d b a e h f c 二叉樹的3中遍歷,知道任何其中2種,就可以建立這個二叉樹。自然就可以得到第3中的遍歷了。具體方法可以翻書或網上查詢相關資料。前序是 根左右 由此可判斷a為根節點,再看中序 由於a為根,所以在中序中根據 左根右 原則a前的即為a的左子樹 dgb 右邊...