6.1树的定义和存储
生活随笔
收集整理的這篇文章主要介紹了
6.1树的定义和存储
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
樹(Tree)是n(n>=0)個結點的有限集。如下圖中,A為根,圖6.1(a)稱為子樹(SubTree)
結點度(Degree):如A的結點度為3,B的結點度為2,C的結點度為1。
結點度為0的結點叫葉子(Leaf):如K,L,M。
孩子(Child):如L是E的孩子,E是B的孩子。
雙親(Parent):A是B的雙親,B是E的雙親。
兄弟(Sibling):如BCD為兄弟。
層次(Level):根為第一層,然后第二層,第三層。
深度(Depth):上圖深度為4。
森林(Forest):是m(m>=0)顆互不相交的樹的集合。
樹的存儲結構是干什么的??
操作系統的文件管理,目錄管理,網絡系統中的域名管理,數據庫系統里面的索引,編譯器的語法書等等
因為內存是線性的,所以下面表示樹只有三種表示法:
雙親、孩子、孩子兄弟表示法
下面給出雙親表示法:
typedef int ElemType;typedef struct PTNode {ElemType data; //結點數據int parent; //雙親位置 }PTNode;typedef struct {PTNode nodes[MAX_TREE_SIZE];int r; //根結點位置int n; //結點數目 }PTree; 如下,這樣的話,上圖可以寫成這樣:
| 下標 | 數據 | 父母 |
| 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 |
大家先不要掌握這個是如何排序的,只要知道,這個父母表示法就是類似于這樣的。
這個的缺點是,如果要知道某個孩子是什么,就要遍歷整個樹。
我們也可以把結構改變,增加兩列,上面填寫他們孩子的下標。
下面是孩子表示法:
下面直接表示,因為為了演示方便,在此就不排序了。以后說到再排序
孩子父親表示法就是在這行加入父親行號如下圖:
下面是代碼:
//雙親孩子表示法 #define MAX_TREE_SIZE 100 typedef int ElemType;//孩子結點 typedef struct CTNode {int child; //孩子結點的下標struct CTNode *next; //指向下一個孩子結點的指針 }*ChildPtr;//表頭結構 typedef struct {ElemType data;int parent; //下標表示ChildPtr firstChild; }CTBox;//樹結構 typedef struct {CTBox nodes[MAX_TREE_SIZE]; //結點數組int r, n; //根的位置,和結點數目總結
以上是生活随笔為你收集整理的6.1树的定义和存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.6m元多项式的表示
- 下一篇: WEB安全基础-点击劫持漏洞基础