6.1树的定义和存储
樹(shù)(Tree)是n(n>=0)個(gè)結(jié)點(diǎn)的有限集。如下圖中,A為根,圖6.1(a)稱為子樹(shù)(SubTree)
結(jié)點(diǎn)度(Degree):如A的結(jié)點(diǎn)度為3,B的結(jié)點(diǎn)度為2,C的結(jié)點(diǎn)度為1。
結(jié)點(diǎn)度為0的結(jié)點(diǎn)叫葉子(Leaf):如K,L,M。
孩子(Child):如L是E的孩子,E是B的孩子。
雙親(Parent):A是B的雙親,B是E的雙親。
兄弟(Sibling):如BCD為兄弟。
層次(Level):根為第一層,然后第二層,第三層。
深度(Depth):上圖深度為4。
森林(Forest):是m(m>=0)顆互不相交的樹(shù)的集合。
樹(shù)的存儲(chǔ)結(jié)構(gòu)是干什么的??
操作系統(tǒng)的文件管理,目錄管理,網(wǎng)絡(luò)系統(tǒng)中的域名管理,數(shù)據(jù)庫(kù)系統(tǒng)里面的索引,編譯器的語(yǔ)法書等等
因?yàn)閮?nèi)存是線性的,所以下面表示樹(shù)只有三種表示法:
雙親、孩子、孩子兄弟表示法
下面給出雙親表示法:
typedef int ElemType;typedef struct PTNode {ElemType data; //結(jié)點(diǎn)數(shù)據(jù)int parent; //雙親位置 }PTNode;typedef struct {PTNode nodes[MAX_TREE_SIZE];int r; //根結(jié)點(diǎn)位置int n; //結(jié)點(diǎn)數(shù)目 }PTree; 如下,這樣的話,上圖可以寫成這樣:
| 下標(biāo) | 數(shù)據(jù) | 父母 |
| 0 | A | -1 |
| 1 | B | 0 |
| 2 | E | 1 |
| 3 | K | 2 |
| 4 | L | 2 |
| 5 | F | 1 |
| 6 | C | 0 |
| 7 | G | 6 |
| 8 | D | 0 |
| 9 | H | 8 |
| 10 | M | 9 |
| 11 | I | 8 |
| 12 | J | 6 |
大家先不要掌握這個(gè)是如何排序的,只要知道,這個(gè)父母表示法就是類似于這樣的。
這個(gè)的缺點(diǎn)是,如果要知道某個(gè)孩子是什么,就要遍歷整個(gè)樹(shù)。
我們也可以把結(jié)構(gòu)改變,增加兩列,上面填寫他們孩子的下標(biāo)。
下面是孩子表示法:
下面直接表示,因?yàn)闉榱搜菔痉奖?#xff0c;在此就不排序了。以后說(shuō)到再排序
孩子父親表示法就是在這行加入父親行號(hào)如下圖:
下面是代碼:
//雙親孩子表示法 #define MAX_TREE_SIZE 100 typedef int ElemType;//孩子結(jié)點(diǎn) typedef struct CTNode {int child; //孩子結(jié)點(diǎn)的下標(biāo)struct CTNode *next; //指向下一個(gè)孩子結(jié)點(diǎn)的指針 }*ChildPtr;//表頭結(jié)構(gòu) typedef struct {ElemType data;int parent; //下標(biāo)表示ChildPtr firstChild; }CTBox;//樹(shù)結(jié)構(gòu) typedef struct {CTBox nodes[MAX_TREE_SIZE]; //結(jié)點(diǎn)數(shù)組int r, n; //根的位置,和結(jié)點(diǎn)數(shù)目總結(jié)
以上是生活随笔為你收集整理的6.1树的定义和存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5.6m元多项式的表示
- 下一篇: WEB安全基础-点击劫持漏洞基础