1. 程式人生 > >[資料結構]樹結構的基本概念和理解

[資料結構]樹結構的基本概念和理解

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; 

在這裡插入圖片描述