樹與森林
阿新 • • 發佈:2022-02-11
樹的儲存結構
1.雙親表示法
雙親表示法即採用一組連續的空間表示,其中根結點的雙親用-1表示。
雙親表示法的儲存結構
#define MAX_TREE_SIZE 50 //樹中最多的結點數
typedef struct{
char data; //資料元素
int parent; //雙親位置
}PTNode;
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int n; //結點數
}PTree;
這種儲存結構能夠快速找到雙親的結點,可是在求結點的孩子時,須要遍歷整個樹形結構。
2.孩子表示法
種儲存方式找子結點比較容易,可是找父節點,則須要遍歷N個結點中孩子連結串列指標域所指向的N個孩子連結串列。
3.孩子兄弟表示法
以二叉連結串列做為樹的儲存結構,每一個結點包括3部份內容——結點值、指向結點第一個孩子結點的指標和指向下一個兄弟節點的指標。
最大的優點在於能夠快速的完成樹轉化為二叉樹的操做,一樣,這種結構便於尋找子結點以及兄弟結點,查詢雙親結點的時候比較麻煩,若每一個結點在增設一個parent域指向其父節點,則查詢父結點也很方便。
4.樹、森林、二叉樹的轉換
樹轉換二叉樹的規則:每一個結點左指標指向它的第一個孩子結點,右指標指向它在樹中相鄰的兄弟結點,可表示為“左孩子,右兄弟”,因為根結點沒有兄弟,因此樹轉換而得的二叉樹沒有右子樹。
樹->二叉樹
5、樹和森林的遍歷
1、樹的遍歷:
-
1.先根遍歷:相對應為樹的先序遍歷
-
2.後根遍歷:相對應為樹的中序遍歷
2、森林的遍歷
先序遍歷森林
-
1)訪問森林中第一棵樹的根結點
-
2)先序遍歷第一棵樹中的根節點的子樹森林
-
3)先序遍歷除第一課子樹以後剩餘的樹構成森林。
中序遍歷森林
-
1)中序遍歷森林中第一棵樹的根結點的子樹森林
-
2)訪問第一棵樹的根結點
-
3)中序遍歷除去第一棵樹以後剩餘的樹構成的森林