程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DS之樹

DS之樹

編輯:DB2教程

DS之樹


樹型結構是一類非常重要的非線性數據結構,其中以樹和二叉樹最為常用,直觀看來,樹是以分支關系定義的層次結構。

樹的定義

樹(Tre)e是n(n>=0)個結點的有限集。在任意一棵非空樹中:

(1)有且僅有一個特定的稱為根(Root)的結點。

(2)當n>1時,其余結點可分為m(m>0)個互不相交的有限集T1,T2,...,Tm,其中每一個集合本身又是一棵樹,並且稱為根的子樹。

(3)樹的結點包含一個數據元素及若干指向其子樹的分支。

(4)結點擁有的子樹數稱為結點的度。

(5)度為0的結點稱為葉子或終端結點。

(6)度不為0的結點稱為非終端結點或分支結點。

(7)除根結點之外,分支結點也稱為內部結點。

(8)樹的度是樹內各結點的度的最大值。

(9)結點的子樹的根稱為該結點的孩子,相應地,該結點稱為孩子的雙親。同一個雙親的孩子之間互稱兄弟。

(10)結點的層次從根開始定義起,根為第一層,根的孩子為第二層。

(11)樹中各結點的最大層次稱為樹的深度或高度。

 

\

 

從上面的示例可以看出:

(1)這棵樹的根為A。

(2)這棵樹的深度或高度為5。

(3)這棵樹的層次為五層。

(4)這棵樹的葉子為:D,E,F,G,I,K。

(5)這棵樹的度為3,因為這棵樹中結點C有三個孩子並且為孩子最多的結點。

(6)這棵樹的內部結點為:B,C,D,E,F,G,H,I,J,K。

如果將樹結點的各子樹看成從左至右是有次序的(即不能替換),則稱該樹為有序樹,否則為無序樹。

森林是m(m>=0)棵互不相交的樹的集合。對樹中每個結點而言,其子樹的集合即為森林。

樹的基本操作:

InintTree(&T)
操作結果:構造空樹T
DestroyTree(&T)
初始條件:樹T存在
操作結果:銷毀樹T
CreateTree(&T,definition)
初始條件;definition給出樹的定義
操作結果:按definition構造樹
ClearTree(&T)
初始條件;樹T存在
操作結果:將樹T清空為樹
TreeEmpty(T)
初始條件:樹T存在
操作結果:若T為空樹,則返回TRUR,否則返回FALSE
TreeDepth(T)
初始條件:樹T存在
操作結果:返回T的深度
Root(T)
初始條件:樹T存在
操作結果:返回T的根
Value(T,e) 
初始條件:樹T存在,e是T中的某個結點
操作結果:返回e的值
Assign(T,e,value)
初始條件:樹T存在,e是T中的某個結點
操作結果:結點e賦值為value
Parent(T,e)
初始條件:樹T存在,e是T中的某個結點
操作結果:若e是T的非根結點,則返回它的雙親,否則函數值為“空”
LeftChild(T,e)
初始條件:樹T存在,e是T中的某個結點
操作結果:若e是T的非葉子結點,則返回它的最左孩子,否則函數值為“空”
RightChild(T,e)
初始條件:樹T存在,e是T中的某個結點
操作結果:若e是T的非葉子結點,則返回它的最右孩子,否則函數值為“空”
InsertChild(&T,&p,i,e)
初始條件:樹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棵子樹
TraverseTree(T,Visit())
初始條件:樹T存在,Visit是對結點操作的應用函數
操作結果:按某種次序對T的每個結點調用函數Visit()一次且至多一次。一旦Visit()失敗,則操作失敗





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved