1. 程式人生 > >資料結構中的各種樹淺談

資料結構中的各種樹淺談

資料結構中為了儲存和查詢的方便,用各種樹結構來儲存檔案,本章就淺談一下各種樹的表示方法、特點及各自的用途,本章設計的樹結構包括:二叉查詢樹(二叉排序樹)、平衡二叉樹(AVL樹)、紅黑樹、B-樹、B+樹、字典樹(trie樹)、字尾樹、廣義字尾樹。

1、二叉查詢樹(二叉排序樹)

  (圖a)

二叉查詢樹是一種動態查詢表(圖a),具有這些性質:                                 
(1)若它的左子樹不為空,則左子樹上的所有節點的值都小於它的根節點的值;
(2)若它的右子樹不為空,則右子樹上所有節點的值都大於它的根節點的值;
(3)其他的左右子樹也分別為二叉查詢樹;
(4)二叉查詢樹是動態查詢表,在查詢的過程中可見新增和刪除相應的元素,在這些操作中需要保持二叉查詢樹的以上性質。

2、平衡二叉樹(AVL樹)

(圖b)

  含有相同節點的二叉查詢樹可以有不同的形態,而二叉查詢樹的平均查詢長度與樹的深度有關,所以需要找出一個查詢平均長度最小的一棵,那就是平衡二叉樹(圖b),具有以下性質:
(1)要麼是棵空樹,要麼其根節點左右子樹的深度之差的絕對值不超過1;
(2)其左右子樹也都是平衡二叉樹;
(3)二叉樹節點的平衡因子定義為該節點的左子樹的深度減去右子樹的深度。則平衡二叉樹的所有節點的平衡因子只可能是-1,0,1。

3、紅黑樹

(圖c)

  紅黑樹是一種自平衡二叉樹,在平衡二叉樹的基礎上每個節點又增加了一個顏色的屬性,節點的顏色只能是紅色或黑色。具有以下性質:
(1)根節點只能是黑色;
(2)紅黑樹中所有的葉子節點後面再接上左右兩個空節點,這樣可以保持演算法的一致性,而且所有的空節點都是黑色;
(3)其他的節點要麼是紅色,要麼是黑色,紅色節點的父節點和左右孩子節點都是黑色,及黑紅相間;
(4)在任何一棵子樹中,從根節點向下走到空節點的路徑上所經過的黑節點的數目相同,從而保證了是一個平衡二叉樹。

4、B-樹

(圖d)

  B-樹是一種平衡多路查詢樹,它在檔案系統中很有用。一棵m階B-樹(圖d為4階B-樹),具有下列性質:
(1)樹中每個節點至多有m棵子樹;
(2)若根節點不是葉子節點,則至少有2棵子樹;
(3)除根節點之外的所有非終端節點至少有棵子樹;
(4)每個節點中的資訊結構為(A0,K1,A1,K2......Kn,An),其中n表示關鍵字個數,Ki為關鍵字,Ai為指標;
(5)所有的葉子節點都出現在同一層次上,且不帶任何資訊,也是為了保持演算法的一致性。

5、B+樹

(圖e)

  B+數是B-樹的一種變形,它與B-樹的差別在於(圖e為3階B+樹):
(1)有n棵子樹的節點含有n個關鍵字;
(2)所有的葉子節點包含了全部關鍵字的資訊,及指向這些關鍵字記錄的指標,且葉子節點本身按關鍵字大小自小到大順序連結;
(3)所有非終端節點可以看成是索引部分,節點中僅含有其子樹(根節點)中最大(或最小)關鍵字,所有B+樹更像一個索引順序表;
(4)對B+樹進行查詢運算,一是從最小關鍵字起進行順序查詢,二是從根節點開始,進行隨機查詢。

6、字典樹(trie樹)

(圖f)

  字典樹是一種以樹形結構儲存大量字串。以便於字串的統計和查詢,經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。具有以下特點(圖f):
(1)根節點為空;
(2)除根節點外,每個節點包含一個字元;
(3)從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串。
(4)每個字串在建立字典樹的過程中都要加上一個區分的結束符,避免某個短字串正好是某個長字串的字首而淹沒。

7、字尾樹

  字尾樹則是一個字串的所有後綴組成的字典樹。具體內容再前幾章已講過。

8、廣義字尾樹

  廣義字尾樹是好幾個字串的的所有後綴組成的字典樹,同樣每個字串的所有後綴都具有一個相同的結束符,不同字串的結束符不同,具體內容見前幾章。

原文地址:http://www.cnblogs.com/dong008259/archive/2011/11/22/2255361.html