树的存储结构以及实现代码
生活随笔
收集整理的這篇文章主要介紹了
树的存储结构以及实现代码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
樹的存儲結(jié)構(gòu)以及實現(xiàn)代碼
?
1、首先假設(shè)有一個樹如下:
?
?
?
?
?
?
?
2、雙親表示法
我們假設(shè)以一組連續(xù)空間存儲樹的結(jié)點,在每個結(jié)點中,附設(shè)一個指示器指示其雙親結(jié)點到鏈表中的位置。這樣,每個結(jié)點除了知道自己是誰以外,還知道他們的雙親在那里。
如下圖所示:
| data? | parent |
?
由于這種存儲結(jié)構(gòu)不能有效的尋找其兄弟結(jié)點,我們隊這種存儲解雇進(jìn)行修改,插入其第一個第一個孩子firstchild的下標(biāo),rightsibling(-1表示沒有)的下標(biāo),變成
| 下標(biāo) | data | parent | firstchild | rightsibling |
| 0 | A | -1 | -1 | -1 |
| 1 | B | 0 | 3 | 2 |
| 2 | C | 0 | 4 | -1 |
| 3 | D | 1 | 6 | -1 |
| 4 | E | 2 | 9 | 5 |
| 5 | F | 2 | -1 | -1 |
| 6 | G | 3 | -1 | 7 |
| 7 | H | 3 | -1 | 8 |
| 8 | I | 3 | -1 | -1 |
| 9 | J | 4 | -1 | -1 |
代碼如下:
//雙親表示法 #define MAX_TREE_NUM 100 //定義樹的最大結(jié)點數(shù)目 typedef char ElemType; //定義結(jié)點中的數(shù)據(jù)類型 typedef struct PTNode {int parent; //每個結(jié)點的雙親所在位置的下標(biāo)ElemType data; //每個結(jié)點中存放的數(shù)據(jù)int firstchild; //從左邊開始數(shù),這個結(jié)點第一個孩子的位置(下標(biāo))int rightsibling; //從左邊開始數(shù),這個結(jié)點右邊的那個兄弟的下標(biāo) }PTNode; typedef struct PTree {PTNode data[MAX_TREE_NUM]; //樹的結(jié)點數(shù)組int r; //根節(jié)點的位置(下標(biāo))int n; //當(dāng)前樹中結(jié)點數(shù)目 }PTree;
3、孩子雙親表示法
?
?
?
?
?
?
?
?
代碼如下:
typedef struct CNode //定義孩子結(jié)點,以鏈表的形式存儲孩子和孩子的下標(biāo) {int child; //孩子的下標(biāo)CNode *next; //如果存在不止一個孩子,則next用來存放指向下一個孩子的指針,否則為空 }CNode; typedef struct PNode //定義雙親結(jié)點 {int parent; //雙親結(jié)點的下標(biāo)struct CNode *firstchild; //指向第一個孩子結(jié)點的指針ElemType data; //雙親結(jié)點中存放的數(shù)據(jù) }PNode;typedef struct PCTree //定義一個雙親-孩子存儲結(jié)構(gòu)表示的樹結(jié)構(gòu) {struct PNode nodes[MAX_TREE_NUM]; //定義一個含有MAX_TREE_NUM個結(jié)點的樹int c; //根結(jié)點int n; //當(dāng)前樹中結(jié)點數(shù)目 }
4、孩子兄弟表示法
?
?
?
?
?
?
?
?
?
代碼如下:
//孩子兄弟表示法 typedef struct PNode //定義一個孩子-兄弟存儲結(jié)構(gòu)表示樹 {ElemType data; //結(jié)點中存放的數(shù)據(jù)PNode *firstchild; //指向從左邊起,第一個孩子結(jié)點,沒有孩子的結(jié)點指向NULLPNode *rightsibling; //指向第一個孩子的右邊的一個兄弟結(jié)點的指針,如果含有多個兄弟結(jié)點,依次指過去(類似單鏈表)}PNode;
?
posted on 2014-12-17 15:50 BeatificDevin 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/devinblog/p/4169593.html
總結(jié)
以上是生活随笔為你收集整理的树的存储结构以及实现代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 随便写写2014创业记(二)
- 下一篇: c语言重点