中序和后序確定二叉樹 已知一棵二叉樹的前序序列和中序序列分別是ABCDEFGHIJ和BAEDCHGIFJ,構(gòu)造二叉樹,并寫出其后序序列?
已知一棵二叉樹的前序序列和中序序列分別是ABCDEFGHIJ和BAEDCHGIFJ,構(gòu)造二叉樹,并寫出其后序序列?這是一個遞歸算法。第一個預(yù)排序必須是根,根是a從預(yù)排序中,我們可以分離左右子樹:B和e
已知一棵二叉樹的前序序列和中序序列分別是ABCDEFGHIJ和BAEDCHGIFJ,構(gòu)造二叉樹,并寫出其后序序列?
這是一個遞歸算法。
第一個預(yù)排序必須是根,根是a
從預(yù)排序中,我們可以分離左右子樹:B和edchgifj,它們是預(yù)排序
從預(yù)排序中,我們可以分離左右子樹:B和cdefghij,它們是預(yù)排序。
這樣的問題變成了兩個同樣的小問題,遞歸就解決不了了。
首先要明確前序、中序、后序的遍歷順序:前序:父節(jié)點、左子節(jié)點、右子節(jié)點;中序:左子節(jié)點、父節(jié)點、右子節(jié)點;后序:左子節(jié)點、右子節(jié)點、父節(jié)點;后序:左子節(jié)點、右子節(jié)點、右子節(jié)點;后序:左子節(jié)點、右子節(jié)點;后序:左子節(jié)點節(jié)點,右子節(jié)點;首先根據(jù)前序遍歷,確定整棵二叉樹的根節(jié)點(前序的第一個節(jié)點);然后通過中間序遍歷,將整棵二叉樹按根節(jié)點直接劃分為兩個子樹。
此時,按照預(yù)序和中間序一步一步地繪制整個二叉樹并不困難。然后我們可以編寫后序遍歷序列。例如:已知二叉樹的前序遍歷序列為bc D E F H,中序遍歷序列為bd C E a H F,寫后序遍歷序列。根據(jù)預(yù)排序,樹的根節(jié)點是a;根據(jù)中間順序和根節(jié)點,B、D、C、E在根節(jié)點的左子樹上,H、F在根節(jié)點的右子樹上;通過對每個子樹的逐步分析,樹是a/b f/C H/De后一個順序是:decbhfa
要通過分段來解決問題,先找到根節(jié)點(通過后一個順序),然后將中間順序的序列分成兩段,左子樹和右子樹,然后遞歸地,在分割時,您可以使用中間順序的左右子樹的節(jié)點數(shù)來確定序列中每個段的節(jié)點數(shù)。
例如,middle bdace
post dbeca1,在本例中,它是一個
2。中間順序?qū)?yīng)的根是a,所以a是根,BD是左子樹,CE是右子樹
3。左子樹上有兩個節(jié)點,右子樹上有兩個節(jié)點,因為后一個順序的遍歷是先左后右,所以后一個順序被分成兩段,左dB和右EC
4。因此,確定左子樹的根是B,右子樹的根是C
5如果節(jié)點和節(jié)點數(shù)是遞歸確定的,則右子樹是e
上面得到的結(jié)果
二叉樹的結(jié)構(gòu)圖
---a
-/-]---B---C
---
---D---e
是ABCDE