- 樹(Tree)是n(n>=0)個結點的有限集。當n=0時成爲空樹,在任意一棵非空樹中:
-
有且僅有一個特定的稱爲根(Root)的結點;
-
當n>1時,其餘結點可分爲m(m>0)個互不相交的有限集T1、T2、…、Tm,其中每一個集合本身又是一棵樹,並且稱爲根的子樹(SubTree)
- 結點擁有的子樹數稱爲結點的度-(Degree),樹的度取樹內各結點的度的最大值。
-
度爲0的結點稱爲葉結點(Leaf)或終端結點;
-
度不爲0的結點稱爲分支結點或非終端結點,除根結點外,分支結點也稱爲內部結點。
- 結點的層次(Level)從根開始定一起,根爲第一層,根的孩子爲第二層。其雙親在同一層的結點互爲堂兄弟。樹中結點的最大層次稱爲樹的深度(Depth)或高度。
- 若將樹中每個結點的各子樹看成是從左到右有次序的(即不能互換),則稱該樹爲有序樹(Ordered Tree);否則稱爲無序樹(UnorderedTree)。
- 樹的雙親表示法
// 樹的雙親表示法結點結構定義
#define MAX_TREE_SIZE 100
typedef int ElemType;
typedef struct PTNode
{
ElemType data; // 結點數據
int parent; // 雙親位置
}PTNode;
typedef struct
{
PTNode nodes[MAX_TREE_SIZE];
int r; // 根的位置
int n; // 結點數目
}PTree;
- 樹的雙親孩子表示法
利用數組和鏈表結合
#define MAX_TREE_SIZE 100
typedef char 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;
}