1. 程式人生 > >《大話資料結構6》—— “樹的定義和基本概念”

《大話資料結構6》—— “樹的定義和基本概念”

 


 定義



●  樹(Tree)是n(n≥0)個結點的有限集T,並且當n>0時滿足下列條件:

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

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

    特別地,不含任何結點(即n=0)的樹,稱為空樹。

如下就是一棵樹的結構:

樹的定義之中還用到了樹的概念,即遞迴定義。如圖中的子樹T1和T2就是根結點A的子樹。當然D,G,H,I 組成的的樹又是B結點的子樹,E,J 組成的樹是C結點的子樹。

對於樹的定義還需要注意兩點:

n>0時根結點是唯一的,不可能存在多個根結點。

m>0時,子樹的個數沒有限制,但它們一定是互不相交的。下圖中的兩個結構就不符合樹的定義,因為它們都有相交的子樹。

 


基本術語


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

結點的度——結點所有子樹的個數稱為該結點的度,說白了就是一個結點後面有幾個分支,有幾個分支就稱為該結點的度。 比如說 上圖的啊A ,結點的度為2,因為它有子樹 B、C,結點E的度為1。

葉子結點——度為0的結點稱為葉子結點,也叫終端結點。

分支結點——度不為0的結點稱為分支結點,也叫非終端結點。也叫內部結點。

樹的度—— 就是這棵樹中各個結點的度最大值。 就是把所有結點的度拿來比較,誰最大,誰就是樹的度, 上面的樹的度為3.

路徑——從根結點開始, 到達某結點p所經過的所有結點成為結點p的層次路徑, 有且只有一條。

孩子(child)和雙親(parents) —— 樹中某個結點的子樹之根稱之為該結點的孩子(child),相應的,該結點稱之為孩子的雙親(parents)。同一雙親的孩子稱為兄弟(sibling)。 

祖先(ancestor)和子孫(descendent)——結點的祖先是從根到該結點所經分支上的所有結點。所以對於H來說,D,B,A都是它的祖先。反之,以某結點為根的子樹中的任一結點都稱為該結點的子孫。B的子孫有D,G,H,I。

 

結點的層次(Level)——從根開始定義起,根為第一層,根的孩子為第二層。若某結點在第1層,則其子樹的根就在第 i +1 層。

其雙親在同一層的結點互為堂兄弟。顯然在圖中D,E,F都是堂兄弟,而G,H,I 與 J也是堂兄弟。

樹中結點的 最大層次稱為樹的深度(Depth)或高度,當前樹的深度為4(注:也有一些書是定義為branches的個數,此時認為深度為3)。

若將樹中每個結點的各子樹看成是從左到右有次序的(即不能互換),則稱該樹為有序樹(OrderedTree);否則稱為無序(UnorderedTree)。注意:若不特別指明,一般討論的樹都是有序樹。

森林(Forest)是m(m≥0)棵互不相交的樹的集合。對樹中每個結點而言,其子樹的集合即為森林。對於圖1的樹而言,圖2的兩棵子樹其實就可以理解為森林。樹和森林的概念相近。刪去一棵樹的根,就得到一個森林;反之,加上一個結點作樹根,森林就變為一棵樹。
 

對比線性表與樹的結構,它們有很大不同,如圖:


樹的儲存結構


三種表示方法 :

樹是一種遞迴結構,表示方式一般有孩子表示法、雙親表示法、和孩子兄弟表示法3種。樹實現方式有很多種、有可以由廣義表的遞迴實現,也可以有二叉樹實現,其中最常見的是將樹用孩子兄弟表示法轉化成二叉樹來實現。