1. 程式人生 > >資料結構學習筆記——二叉樹之已知兩序排列還原二叉樹

資料結構學習筆記——二叉樹之已知兩序排列還原二叉樹

對於非線性資料結構二叉樹,通過人為規定的三種遍歷順序將其轉化為線性結構存入計算機中。

三種遍歷順序即是三種轉換方式:

先序:先訪問當前節點,再訪問左子樹,後訪問右子樹。

中序:先訪問左子樹,再訪問當前節點,後訪問右子樹。

後序:先訪問左子樹,再訪問右子樹,後訪問當前節點。

當已知先序中序 或 後序中序 排列 均可以還原二叉樹。

因為剛剛學到這裡,嘗試還原,湊巧方法成功了。(不知道這個方法是不是一個大家早已知道的)

我的方法的核心:槓精

所謂槓精就是找極端

兩個公式如下:

可以先不看,在例子中看

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.對於後序和中序,方法相同,唯一一點,後序樹寫在左側,中序樹寫在右側。

後序的排序也是極端的排序,假設沒有右節點。