[資料結構]樹結構的基本概念和理解
1.樹的有關基本概念
定義
樹(Tree)是n(n=0)個結點的有限集。n=0時稱為空樹。在任意一棵非空樹中:(1)有且僅有一個特定的稱為根(Root)的結點;(2)當n>1時,其餘結點可分為m(m>0)個互不相交的有限集T1、T2、……Tm,其中每一個集合本身又是一棵樹,並且稱為根的子樹(SubTree)。
樹結構是一對多的結構
相關概念見圖。
線性結構 | 樹結構 |
---|---|
第一個資料:無前驅 | 根結點:無雙親,唯一 |
最後一個原始:無後繼 | 葉結點:無孩子,可以多個 |
中間元素:有一個前驅,一個後繼 | 內部結點:一個雙親,可以有多個孩子 |
2 樹的抽象資料型別定義
ADT Tree {
資料物件 D: D 是具有相同特性的資料元素的集合。
資料關係 R:(略)
基本操作 P:
{結構初始化}
InitTree (&T );
操作結果:構造空樹 T。
CreateTree (&T, definition);
初始條件: definition 給出樹 T 的定義。
操作結果:按 definition 構造樹 T。
{銷燬結構}
DestroyTree (&T );
初始條件:樹 T 存在。
操作結果:銷燬樹 T。
{引用型操作}
TreeEmpty (T)
初始條件:樹 T 存在。
操作結果:若 T 為空樹,則返回 TURE,否則 FALSE。
TreeDepth (T)
初始條件:樹 T 存在。
操作結果:返回 T 的深度。
Root (T)
初始條件:樹 T 存在。
操作結果:返回 T 的根。
Value (T, cur_e);
初始條件:樹 T 存在, cur_e 是 T 中某個結點。
操作結果:返回 cur_e 的值。
Assign (T, cur_e, value)
初始條件:樹 T 存在, cur_e 是 T 中某個結點。
操作結果:結點 cur_e 賦值為 value。
Parent (T, cur_e)
初始條件:樹 T 存在, cur_e 是 T 中某個結點。
操作結果:若 cur_e 是 T 的非根結點,則返回它的雙
親,否則函式值為“空”。
LeftChild (T, cur_e)
初始條件:樹 T 存在, cur_e 是 T 中某個結點。
操作結果:若 cur_e 是 T 的非葉子結點,則返回它的
最左孩子,否則返回“空”。
RightSibling (T, cur_e)
初始條件:樹 T 存在, cur_e 是 T 中某個結點。
操作結果:若 cur_e 有右兄弟,則返回它的右兄弟,
否則函式值為“空”。
TraverseTree (T, Visit() )
初始條件:樹 T 存在,Visit 是對結點操作的函式。
操作結果:按某種次序對 T 的每個結點呼叫函式
Visit () 一次且至多一次。一旦 Visit ()
失敗,則操作失敗。
{加工型操作}
ClearTree (&T );
初始條件:樹 T 存在。
操作結果:將樹 T 清為空樹。
InsertChild (&T, &p, i, c);
初始條件:樹 T 存在,p 指向 T 中某個結點,1≤i≤p
所指結點的度 + 1,非空樹 c 與 T 不相交。
操作結果:插入 c 為 T 中 p 指結點的第 i棵子樹。
DeleteChild (&T, &p, i);
初始條件:樹 T 存在,p 指向 T 中某個結點,
1≤i≤p 所指結點的度。
操作結果:刪除 T 中 p 所指結點的第 i 棵子樹。
}ADT Tree
3.樹結構的儲存形式
下面介紹 多重連結串列儲存形式
#define MaxChild 10
#define Elemtype int
typedef struct treeNode{
Elemtype data;
struct treeNode *child[MaxChild] ;
}treeNode;