資料結構課上筆記13
阿新 • • 發佈:2018-12-19
樹儲存結構
父節點表示法
資料域:存放結點本身資訊。
雙親域:指示本結點的雙親結點在陣列中的位置。
對應的樹:
/* 樹節點的定義 */
#define MAX_TREE_SIZE 100
typedef struct{
TElemType data;
int parent; /* 父節點位置域 */
} PTNode;
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int n; /* 節點數 */
} PTree;
特點:找雙親容易,找孩子難。
孩子表示法(樹的鏈式儲存結構)
childi指向一個結點
可以加上parent。
在有 n 個結點、度為 d 的樹的 d 叉連結串列中,有 n×(d-1)+1 個空鏈域
我們可以用degree記錄有幾個孩子,省掉空間,但是結點的指標個數不相等,為該結點的度 degree。
孩子連結串列:
把每個結點的孩子結點排列起來,看成是一個線性表,用單鏈表儲存,則 n 個結點有 n 個孩子連結串列(葉子的孩子連結串列為空表)。而 n 個頭指標又組成一個線性表,用順序表(含 n 個元素的結構陣列)儲存。
孩子兄弟表示法(二叉樹表示法)
用二叉連結串列作樹的儲存結構,連結串列中每個結點的兩個指標域分別指向其第一個孩子結點和下一個兄弟結點
typedef struct CSNode{
ElemType data;
struct CSNode *firstchild, *nextsibling;
} CSNode, *CSTree;