已知二叉樹後序遍歷和中序遍歷,求前序遍歷
阿新 • • 發佈:2019-01-22
後續遍歷的順序是左右根,中序遍歷的順序是左根右
這點應該懂吧
由後續訪問序列可以看出最後一個被訪問的必定是這個樹的根
而中序遍歷的序列可以看出,一棵樹當根確定後,在根前面被訪問的是他的左子樹,後邊的是他的右子樹元素
弄懂了上邊兩點就開始做題吧
由後序遍歷序列是DBCEFGHA
為了方便,我寫小寫字母了啊
可以看出整棵樹的根節點是a
再看中序遍歷序列EDCBAHFG
a是根節點
左子樹由a左邊的元素EDCB構成
右子樹由a右邊的元素HFG構成
也就是
a
/----/
EDCB--HFG
到這裡應該都懂吧
那接下來就著重講一下左子樹的確定
右子樹同理可得了
看左子樹有4個元素EDCB
後序遍歷序列是DBCE
最後訪問e
可以確定a下邊連線的是e
根據中序遍歷序列EDCB
最先訪問e
由於中序遍歷e前面沒有元素
可以確定e左子樹為空
即下面的樣子
a
//
e
/
dbc
也就是還剩下dbc的順序沒理好
後序遍歷序列是dbc
最後訪問c
則c為根節點
連線e
中序遍歷序列dcb
c前邊有d
後邊有b
哪麼可以確定dcb這棵樹為
c
//
d b
哪麼整棵樹的左子樹就確定了
為
e
/
c
//
d b
同理
右子樹應為
h
/
g
/
f
則整棵樹就出來了
為下圖所示
得出整棵樹
前序遍歷自然不在話下
為aecdbhgf
------------------------
暈了,想偷下懶都不行呵
同理就是要你自己照著剛才的方法再推右邊啊
左邊在上邊已經說了
那我們來看右邊
右邊剩下HFG
後序遍歷序列是fgh
h最後被訪問
可以確定h是右子樹的根
也就是與a連著的是h
接下來看中序遍歷順序是HFG
h前面沒有元素
說明h的左子樹為空
剩下的g和f都是他的右子樹的元素
再看後續遍歷序列FG
g最後被訪問
可以確定g是根節點連線h
然後看中序遍歷序列fg
f在前
哪麼f應該為g的左子樹
整棵樹就出來了
再不懂我也不知道怎麼解釋了
額
-------------------------
好久沒做類似的題
有點生疏了
若果有錯
歡迎指出
這點應該懂吧
由後續訪問序列可以看出最後一個被訪問的必定是這個樹的根
而中序遍歷的序列可以看出,一棵樹當根確定後,在根前面被訪問的是他的左子樹,後邊的是他的右子樹元素
弄懂了上邊兩點就開始做題吧
由後序遍歷序列是DBCEFGHA
為了方便,我寫小寫字母了啊
可以看出整棵樹的根節點是a
再看中序遍歷序列EDCBAHFG
a是根節點
左子樹由a左邊的元素EDCB構成
右子樹由a右邊的元素HFG構成
也就是
a
/----/
EDCB--HFG
到這裡應該都懂吧
那接下來就著重講一下左子樹的確定
右子樹同理可得了
看左子樹有4個元素EDCB
後序遍歷序列是DBCE
最後訪問e
可以確定a下邊連線的是e
根據中序遍歷序列EDCB
最先訪問e
由於中序遍歷e前面沒有元素
可以確定e左子樹為空
即下面的樣子
a
//
e
/
dbc
也就是還剩下dbc的順序沒理好
後序遍歷序列是dbc
最後訪問c
則c為根節點
連線e
中序遍歷序列dcb
c前邊有d
後邊有b
哪麼可以確定dcb這棵樹為
c
//
d b
哪麼整棵樹的左子樹就確定了
為
e
/
c
//
d b
同理
右子樹應為
h
/
g
/
f
則整棵樹就出來了
為下圖所示
得出整棵樹
前序遍歷自然不在話下
為aecdbhgf
------------------------
暈了,想偷下懶都不行呵
同理就是要你自己照著剛才的方法再推右邊啊
左邊在上邊已經說了
那我們來看右邊
右邊剩下HFG
後序遍歷序列是fgh
h最後被訪問
可以確定h是右子樹的根
也就是與a連著的是h
接下來看中序遍歷順序是HFG
h前面沒有元素
說明h的左子樹為空
剩下的g和f都是他的右子樹的元素
再看後續遍歷序列FG
g最後被訪問
可以確定g是根節點連線h
然後看中序遍歷序列fg
f在前
哪麼f應該為g的左子樹
整棵樹就出來了
再不懂我也不知道怎麼解釋了
額
-------------------------
好久沒做類似的題
有點生疏了
若果有錯
歡迎指出