樹的表示方法
樹的表示方法一般有三種:遍歷表示法,括號序列法以及prufer數列。
1.遍歷表示法
遍歷表示法就是通過遍歷一棵樹來確定這棵樹的表示方法。遍歷方法有三種:先序遍歷,中序遍歷和后序遍歷。
先序遍歷:按照父節點,左子結點,右子節點來遍歷(簡稱 頭左右)。以上圖為例,先序遍歷表達式為1 2 4 8 9 5 10 3 6 7。
中序遍歷:按照左子結點,父節點,右子節點來遍歷(簡稱 左頭右)。以上圖為例,中序遍歷表達式為8 4 9 2 10 5 1 6 3 7。
后序遍歷:按照左子結點,右子節點,父節點來遍歷(簡稱 左右頭)。以上圖為例,后序遍歷表達式為8 9 4 10 5 2 6 7 3 1。
2.括號序列法
通過遍歷樹時的遍歷順序以及出入每個節點的時間組成的序列。
按照先序遍歷即為:(1(2(4(8)(9))(5(10))(3(6)(7))。
3.prufer數列
將一棵n各節點的無根樹轉化為長度為n-2的字符串,字符串與樹之間一一對應。
生成字符串:每次將最小的葉結點的父節點存入字符串,並刪除該葉結點,直到無根樹只剩兩個節點。
還原無根樹:每次將字符串中第i個節點和從i到n-2未出現過的最小的節點連接起來,最后連接無根樹剩余的那兩個節點。
生成步驟:
找到6,字符串存入3,刪除6,當前字符串為:3。
找到7,字符串存入3,刪除7,當前字符串為:3 3。
找到3,字符串存入1,刪除3,當前字符串為:3 3 1。
找到1,字符串存入2,刪除1,當前字符串為:3 3 1 2。
找到8,字符串存入4,刪除8,當前字符串為:3 3 1 2 4。
找到9,字符串存入4,刪除9,當前字符串為:3 3 1 2 4 4。
找到4,字符串存入2,刪除4,當前字符串為:3 3 1 2 4 4 2。
找到10,字符串存入5,刪除10,當前字符串為:3 3 1 2 4 4 2 5。
最后剩余兩節點為2 5。
還原步驟:
找到3,3之后未出現且未被標記的點為6,標記點6,連接3 6。
找到3,3之后未出現且未被標記的點為7,標記點7,連接3 7。
找到1,1之后未出現且未被標記的點為3,標記點3,連接1 3。
找到2,2之后未出現且未被標記的點為1,標記點1,連接1 2。
找到4,4之后未出現且未被標記的點為8,標記點8,連接4 8。
找到4,4之后未出現且未被標記的點為9,標記點9,連接4 9。
找到2,2之后未出現且未被標記的點為4,標記點4,連接2 4。
找到5,5之后未出現且未被標記的點為10,標記點10,連接5 10。
最后連接生成時最后剩余的兩點2 5。
以上三種表示法中,遍歷表示法適用於二叉樹,括號序列法適用於有序樹,prufer數列適用於無根樹。