一、樹(Tree)是n(n>=0)個結點的有限集。n=0時稱為空樹。在任意一棵非空樹中:(1)有且僅有一個特定的稱為根(root)的結點。
(2)當n>1時,其余結點可分為m(m>0)個互不相交的有限集T1,T2,....,Tm, 其中每一個集合本身又是一棵樹,並且稱為根的子樹(SubTree),如圖1所示:
圖1
樹的定義之中還用到了樹的概念,即遞歸定義。如圖2中的子樹T1和T2就是根結點A的子樹。當然D,G,H,I 組成的的樹又是B結點的子樹,E,J 組成的樹是C結點的子樹。
圖2
對於樹的定義還需要注意兩點:
1.n>0時根結點是唯一的,不可能存在多個根結點。
2.m>0時,子樹的個數沒有限制,但它們一定是互不相交的。如圖3中的兩個結構就不符合樹的定義,因為它們都有相交的子樹。
圖3
二.樹的結點包含一個數據元素及若干指向其子樹的分支。結點擁有的子樹稱為結點的度(Degree)。度為0的結點稱為葉結點(Leaf)或終端結點;度不為0的結點稱為非終端結點或分支結點,除根結點之外,分支結點也稱為內部結點。樹的度是樹內各結點的度的最大值。如圖4,因為這棵樹結點的度的最大值是結點D的度3,所以樹的度也為3。
圖4
結點的子樹的根稱為該結點的孩子(Child),相應地,該結點稱為孩子的雙親(Parent),同一個雙親的孩子之間互稱為兄弟(Sibling)。結點的祖先是從根到該結點所經分支上的所有結點。所以對於H來說,D,B,A都是它的祖先。反之,以某結點為根的子樹中的任一結點都稱為該結點的子孫。B的子孫有D,G,H,I,如圖5所示。
圖5
三、結點的層次(Level)從根開始定義起,根為第一層,根的孩子為第二層。其雙親在同一層的結點互為堂兄弟。顯然在圖6中D,E,F都是堂兄弟,而
G,H,I 與 J也是堂兄弟。樹中結點的 最大層次稱為樹的深度(Depth)或高度,當前樹的深度為4(注:也有一些書是定義為branches的個數,此時認為
深度為3)。
圖6
若將樹中每個結點的各子樹看成是從左到右有次序的(即不能互換),則稱該樹為有序樹(OrderedTree);否則稱為無序樹(UnorderedTree)。注意:若不特別指明,一般討論的樹都是有序樹。
森林(Forest)是m(m≥0)棵互不相交的樹的集合。對樹中每個結點而言,其子樹的集合即為森林。對於圖1的樹而言,圖2的兩棵子樹其實就可以理解為森林。樹和森林的概念相近。刪去一棵樹的根,就得到一個森林;反之,加上一個結點作樹根,森林就變為一棵樹。
對比線性表與樹的結構,它們有很大不同,如圖7所示。
圖7
參考:《大話數據結構》