樹的基本知識


一、定義:

樹(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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM