1. 程式人生 > >樹、森林與二叉樹的轉換

樹、森林與二叉樹的轉換

由於二叉樹和樹都可以用二叉連結串列作為儲存結構,則以二叉連結串列作為媒介可以匯出樹與二叉樹的一個對應關係,即給定一棵樹,可以找到唯一的一顆二叉樹與之對應。從物理結構上看,樹的孩子兄弟表示法語二叉樹的二叉連結串列表示法相同,即每個結點共有兩個指標,分別指向結點第一個孩子和結點的下一兄弟結點,而二叉連結串列使用雙指標。因此,就可以用同一儲存結構的不同解釋將一棵樹轉換為二叉樹。

樹轉換成二叉樹
每個結點左指標指向它的第一個孩子結點,右指標指向它在樹中的相鄰兄弟結點,可表示為“左孩子右兄弟”。由於根結點沒有兄弟,所以,由樹轉換而得的二叉樹沒有右子樹。

這裡寫圖片描述

森林轉換成二叉樹
將森林轉換成二叉樹的規則與樹類似。先將森林中的每一棵樹轉換成二叉樹,再將第一棵樹的根作為轉換後的二叉樹的根,第一棵樹的左子樹作為轉換後二叉樹根的左子樹,第二棵樹作為轉換後二叉樹根的右子樹,第三棵樹作為轉換後二叉樹根的右子樹的右子樹,以此類推。

二叉樹轉換成森林
若二叉樹非空,則二叉樹根及其左子樹為第一棵樹的二叉樹形式,二叉樹根的右子樹可以看作是一個由除第一棵樹外的森林轉換後的二叉樹,應用同樣的方法,直到最後產生一顆沒有右子樹的二叉樹為止,這樣就得到了原森林。

樹轉換成二叉樹的畫法
1.在兄弟結點之前加一連線
2.對每一個結點,只保留它與第一個子結點的連線,與其他子結點的連線全部抹掉
3.以樹根為軸心,順時針旋轉45

森林轉換成二叉樹的畫法
1.將每棵樹的根相連
2.將森林中的每棵樹轉換成相應的二叉樹
3.以第一棵樹的根為軸心順時針旋轉45