1. 程式人生 > >已知二叉樹後序遍歷和中序遍歷,求前序遍歷

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

後續遍歷的順序是左右根,中序遍歷的順序是左根右 
這點應該懂吧 
由後續訪問序列可以看出最後一個被訪問的必定是這個樹的根 
而中序遍歷的序列可以看出,一棵樹當根確定後,在根前面被訪問的是他的左子樹,後邊的是他的右子樹元素 
弄懂了上邊兩點就開始做題吧 
由後序遍歷序列是DBCEFGHA 
為了方便,我寫小寫字母了啊 
可以看出整棵樹的根節點是a 
再看中序遍歷序列EDCBAHFG 
a是根節點 
左子樹由a左邊的元素EDCB構成 
右子樹由a右邊的元素HFG構成 
也就是 

/----/ 
EDCB--HFG 
到這裡應該都懂吧 
那接下來就著重講一下左子樹的確定 
右子樹同理可得了 
看左子樹有4個元素EDCB 
後序遍歷序列是DBCE 
最後訪問e 
可以確定a下邊連線的是e 
根據中序遍歷序列EDCB 
最先訪問e 
由於中序遍歷e前面沒有元素 
可以確定e左子樹為空 
即下面的樣子 

// 


dbc 
也就是還剩下dbc的順序沒理好 
後序遍歷序列是dbc 
最後訪問c 
則c為根節點 
連線e 
中序遍歷序列dcb 
c前邊有d 
後邊有b 
哪麼可以確定dcb這棵樹為 

// 
d b 
哪麼整棵樹的左子樹就確定了 
為 



// 
d b 
同理 
右子樹應為 





則整棵樹就出來了 
為下圖所示 
得出整棵樹 
前序遍歷自然不在話下 
為aecdbhgf 
------------------------
暈了,想偷下懶都不行呵
同理就是要你自己照著剛才的方法再推右邊啊
左邊在上邊已經說了
那我們來看右邊
右邊剩下HFG
後序遍歷序列是fgh
h最後被訪問
可以確定h是右子樹的根
也就是與a連著的是h
接下來看中序遍歷順序是HFG
h前面沒有元素
說明h的左子樹為空
剩下的g和f都是他的右子樹的元素
再看後續遍歷序列FG
g最後被訪問
可以確定g是根節點連線h
然後看中序遍歷序列fg
f在前
哪麼f應該為g的左子樹
整棵樹就出來了

再不懂我也不知道怎麼解釋了


------------------------- 
好久沒做類似的題 
有點生疏了 
若果有錯 
歡迎指出