1. 程式人生 > >B樹、B-樹、B+樹樹詳解

B樹、B-樹、B+樹樹詳解

本文詳細講解B樹、B-樹、B+樹、B*樹的原理,通過參照網路資源整理編寫

1. B樹

B樹也就是最基本的二叉搜尋樹,只不過換了個名字而已。每個非葉子節點最多隻能存放兩個孩子,其中節點的左孩子一定比該節點小,右孩子一定比該節點大,搜尋節點在時間效率上是與二分查詢是等價的(根節點左右孩子總數目差不多的情況下)。它與二分查詢的優點是,在進行增刪操作時,不需要移動大段的記憶體資料,通常是常數開銷。

2. B-樹

性質:是一種多路搜尋樹(非二叉結構):

1.任意非葉子節點最多有M個孩子,且M>2;

2.根節點孩子數為[2,M]個;

        3.除根節點外的非葉子結點孩子樹沒[M/2, M];

4.每個節點存放至少M/2-1(取上整)和至多M-1個關鍵字,至少兩個關鍵字;

5.非葉子結點關鍵字數 = 指向孩子們的指標數 - 1

6.左右葉子節點位於同一層

 7.每個非葉子結點的指標下孩子們的取值範圍在該節點的數值範圍區間內(後面詳細闡述)

如圖為一個B-樹:


下面簡單解釋一下第7條是怎麼回事,其實有點像二叉樹的形式,我們看第二層第一個節點,P1指標下的孩子們的數值範圍在<8,P2孩子們的數值範圍在(8,12),P3孩子們在(12,26)

搜尋有可能在非葉子結點結束,並且效能等價於二分查詢,不同於B樹的根節點是否平衡的情況

3. B+樹

B+樹與B-樹大體相同,除了:

1.非葉子結點的子樹指標樹和關鍵字個數相同;

2.非葉子結點孩子範圍是[ )區間;

3.為所有葉子節點增加鏈指標;

4.所有關鍵字都在葉子節點出現;

5.搜尋只有在葉子節點才能結束,不能在非葉子節點結束。

如圖所示:

其特性是更加適合檔案索引系統。