樹的定義及存儲結構

  1. (Tree)是n(n>=0)個結點的有限集。當n=0時成爲空樹,在任意一棵非空樹中:
  • 有且僅有一個特定的稱爲根(Root)的結點;

  • 當n>1時,其餘結點可分爲m(m>0)個互不相交的有限集T1、T2、…、Tm,其中每一個集合本身又是一棵樹,並且稱爲根的子樹(SubTree)
    在這裏插入圖片描述

  1. 結點擁有的子樹數稱爲結點的度-(Degree),樹的度取樹內各結點的度的最大值。
  • 度爲0的結點稱爲葉結點(Leaf)或終端結點;

  • 度不爲0的結點稱爲分支結點或非終端結點,除根結點外,分支結點也稱爲內部結點。
    在這裏插入圖片描述

  1. 結點的層次(Level)從根開始定一起,根爲第一層,根的孩子爲第二層。其雙親在同一層的結點互爲堂兄弟。樹中結點的最大層次稱爲樹的深度(Depth)或高度
    在這裏插入圖片描述
  2. 若將樹中每個結點的各子樹看成是從左到右有次序的(即不能互換),則稱該樹爲有序樹(Ordered Tree);否則稱爲無序樹(UnorderedTree)
  3. 樹的雙親表示法
    在這裏插入圖片描述
// 樹的雙親表示法結點結構定義
#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;
  1. 樹的雙親孩子表示法
    利用數組和鏈表結合
    在這裏插入圖片描述
#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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章