資料結構學習筆記——二叉樹之已知兩序排列還原二叉樹
阿新 • • 發佈:2019-02-05
對於非線性資料結構二叉樹,通過人為規定的三種遍歷順序將其轉化為線性結構存入計算機中。
三種遍歷順序即是三種轉換方式:
先序:先訪問當前節點,再訪問左子樹,後訪問右子樹。
中序:先訪問左子樹,再訪問當前節點,後訪問右子樹。
後序:先訪問左子樹,再訪問右子樹,後訪問當前節點。
當已知先序中序 或 後序中序 排列 均可以還原二叉樹。
因為剛剛學到這裡,嘗試還原,湊巧方法成功了。(不知道這個方法是不是一個大家早已知道的)
我的方法的核心:槓精
所謂槓精就是找極端
兩個公式如下:
可以先不看,在例子中看
X | X | 得 | X |
Y | Y | Y |
X | Y | 得 | X |
Y | X | Y |
已知先序和中序:
先序:ABCDEFGH
中序:BDCEAFHG
對於先序ABCDEFGH,極端認為是全左樹,即沒有右分支的樹。
對於中序BDCEAFHG,極端認為是全左樹,即沒有右分支的樹。
故還原下圖兩樹
A | G |
B | H |
C | F |
D | A |
E | E |
F | C |
G | D |
H | B |
對於上圖,記為,先序樹在左側,中序樹在右側。
觀察上表發現
C | C | 得 | C |
D | D | D |
而且發現
C | E | X | Y | 得 | X | C | |||
D | C | 即 | Y | X | Y | 故 | 有 | D | E |
E | D |
經驗證此方法奏效(我不知道有沒有人介紹這個方法。是我剛剛一拍腦袋嘗試到的。。可能你們都知道)
有兩點需要注意:
1.對於組合後的節點,對其根操作。即例子中的E是C的右節點,而不是D的。
2.對於後序和中序,方法相同,唯一一點,後序樹寫在左側,中序樹寫在右側。
後序的排序也是極端的排序,假設沒有右節點。