一、定義:
樹(tree):是n (n>0)個結點的有限集。
當n=0時 (根節點是唯一的),稱為空樹,在任意乙個非空樹當中:有且僅有乙個特定的稱為根節點(root)的結點;當n>1時,其餘結點可以分為m(m>0)個互不相交的有限集t1,t2...,tm,其中每乙個集合本身又是乙個樹,並且稱為根的子樹(subtree)。
二、結點的分類:
度(degree):每個結點都有乙個度,結點擁有的子樹數稱為結點的度(degree),樹的度取決於樹內各結點度的最大值。
葉節點(leaf)/葉子結點/ 終端結點:度為0 的結點。
分支結點/ 非終端結點:度不為0 的結點。
內部結點:除跟結點外的分支結點。
三、結點之間的關係
結點的子樹的根稱為該結點的孩子,(例如a結點的孩子為b,c)
相反的,該結點稱為孩子的雙親結點。(a稱為b,c的雙親結點)
同乙個雙親的孩子之間互稱為兄弟
結點的祖先,從根到該結點所經分支上的所有結點
以某結點為根的子樹中的任一結點都為該結點的子孫
四、樹的層次
結點的層次(level)從根開始,根為第一層,根的孩子為第二層。
雙親在同一層的結點互為堂兄弟。
樹中結點的最大層次稱為樹的深度(depth)或高度。
五、有序樹和無序樹
如果將樹中結點的各子樹看成從左到右,是有次序的,不能交換,則稱該樹為有序樹,否則為無序樹。
若兩者表示同一顆樹,就叫無序樹
若兩者表示2顆不同樹,就叫做有序樹
六、森林
森林(forest)是m(m>0)棵互不相交的樹的集合。對樹中的每個結點而言,其子樹的集合即為森林。
七、和線性表的區別
1、線性表:
第乙個資料元素:無前驅
最後乙個資料元素:無後繼
中間元素:乙個前驅乙個後繼
2、樹:
根結點:無雙親,唯一
中間結點:乙個雙親,可以多個孩子
葉結點:無孩子,一棵樹可以有多個葉結點
八、總結樹的抽象資料型別
adt 樹(tree)data
樹是由乙個根節點和若干棵子樹構成。樹中結點具有相同資料型別及層次關係
operation
inittree(*t):構造空樹t
destroytree(*t):銷毀樹t
createtree(*t,definition):按照definition中給出樹的定義來構造樹
cleartree(*t):若樹存在,則清空樹
treeempty(t):若樹為空,返回true,否則false
treedepth(t):返回樹的深度
root(t):返回t的根節點
value(t,cur_e):cur_e是樹t中的乙個結點,返回此結點的值
assign(t,cur_e,value):給樹t的結點cur_e賦值為value
parent(t,cur_e):若cur_e是樹的非根節點,則返回他的雙親,否則為空
leftchild(t,cur_e):若cur_e是樹的非葉結點,則返回他的最左結點,否則返回空
rightsibling(t,cur_e):若cur_e有右兄弟,則返回他的有兄弟,否則為空
insertchild(*t,*p,i,c):插入乙個樹c到樹t中,插入位置為p所指向的結點的第i個子樹。記得將該結點的度加1
deletechild(*t,*p,i):刪除樹t中p所指向結點的第i棵子樹
endadt
樹 基本知識
自由樹 自由樹是乙個連通,無迴路的無向圖.顯然樹是圖的一種.如果乙個無向圖雖然無迴路,但是可能非聯通,那麼這個圖成為森林.森林可以調整為一顆二叉樹 左兒子,右兄弟 森林是m m 0 棵互不相交的樹的集合。令g v,e 為乙個無向圖.則以下6點是等價的.1 g是自由樹 2 g中任意兩個頂點由唯一一條簡...
樹的基本知識
表示法 1.樹形 2.文氏圖 3.凹入 4.括號 結點的度與樹的度 m次樹 結點子樹的個數 非終端節點,分支結點,葉節點 路徑與路徑長度 ki,ki1,ki2,kj,結點數目減1 分支數目 孩子結點,雙親結點,兄弟結點 結點的層次和樹的高度 根節點為第一層,樹的高度。森林 n n 0 個互不相交的樹...
樹的基本知識
樹 樹是一些節點的集合。這個集合可以是空集 若集合不是空集,則樹由根節點r以及0個或多個子樹組成。邊 兩個節點之間的連線就是邊。樹葉 沒有兒子的節點稱為樹葉。節點的度 節點擁有的子樹數稱為節點的度。度 節點的度的最大值稱為樹的度。兄弟 具有相同父親節點的節點稱為兄弟。路徑 從節點n1到節點nk的路徑...