B樹為二叉搜尋樹;
1.所有非葉子結點至多擁有兩個兒子(Left和Right);
2.所有結點存儲一個關鍵字;
3.非葉子結點的左指針指向小于其關鍵字的子樹,右指針指向大于其關鍵字的子樹;
B-tree:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SO3Q2YxkzY4MGOzAzMhNWZ2YWN2QjMidjNmNzY5ImZ08CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一棵m階的B樹(B-tree)滿足下列條件:
1.樹中每個結點至多有m個孩子;
2.除根結點和葉子結點外,其它每個結點至少有m/2個孩子;
3.若根結點不是葉子結點,則至少有2個孩子;
4.所有葉子結點(外部節點)都出現在同一層,葉子結點不包含任何關鍵字資訊;
5.所有非終端結點中包含下列資訊資料 ( n, A0 , K1 , A1 , K2 , A2 , … , Kn , An ),其中:Ki (i=1,…,n)為關鍵字,且Ki < Ki+1 , Ai (i=0,…,n)為指向子樹根結點的指針, n為關鍵字的個數
6.非葉子結點的指針:P[1], P[2], …, P[M];其中P[1]指向關鍵字小于K[1]的子樹,P[M]指向關鍵字大于K[M-1]的子樹,其它P[i]指向關鍵字屬于(K[i-1], K[i])的子樹;
B+樹
B+樹可以看作是B樹的一種變形,在實作檔案索引結構方面比B樹使用得更普遍。
一棵 m 階B+樹可以定義如下:
1.樹中每個非葉結點最多有 m 棵子樹;
2.根結點 (非葉結點) 至少有 2 棵子樹。除根結點外, 其它的非葉結點至少有 ém/2ù 棵子樹;有 n 棵子樹的非葉結點有 n-1 個關鍵碼。
3.所有葉結點都處于同一層次上,包含了全部關鍵碼及指向相應資料對象存放位址的指針,且葉結點本身按關鍵碼從小到大順序連結;
4.每個葉結點中的子樹棵數 n 可以多于 m,可以少于 m,視關鍵碼位元組數及對象位址指針位元組數而定。
5.若設結點可容納最大關鍵碼數為 m1,則指向對象的位址指針也有 m1 個。
6.結點中的子樹棵數 n 應滿足 n 屬于[m1/2, m1]
7.若根結點同時又是葉結點,則結點格式同葉結點。
8.所有的非葉結點可以看成是索引部分,結點中關鍵碼 Ki 與指向子樹的指針 Pi 構成對子樹 (即下一層索引塊) 的索引項 ( Ki, Pi ),Ki 是子樹中最小的關鍵碼。
9.特别地,子樹指針 P0 所指子樹上所有關鍵碼均小于 K1。結點格式同B樹。
10.葉結點中存放的是對實際資料對象的索引。
11.在B+樹中有兩個頭指針:一個指向B+樹的根結點,一個指向關鍵碼最小的葉結點。
B+Tree與B-Tree差別
1.其定義基本與B-樹同,除了:
2.非葉子結點的子樹指針與關鍵字個數相同;
3.非葉子結點的子樹指針P[i],指向關鍵字值屬于[K[i], K[i+1])的子樹(B-樹是開區間);
4.為所有葉子結點增加一個鍊指針;
5.所有關鍵字都在葉子結點出現;B+Tree隻有達到葉子結點才命中(B-Tree可以在非葉子結點命中)
B+Tree的特性
1.所有關鍵字都出現在葉子結點的連結清單中(稠密索引),且連結清單中的關鍵字恰好是有序的;
2.不可能在非葉子結點命中;
3.非葉子結點相當于是葉子結點的索引(稀疏索引),葉子結點相當于是存儲(關鍵字)資料的資料層;
4.更适合檔案索引系統
B*Tree
B*Tree是B+樹的變體,在B+Tree的非根和非葉子結點再增加指向兄弟的指針;B*樹配置設定新結點的機率比B+樹要低,空間使用率更高;
總結
B-樹:多路搜尋樹,每個結點存儲M/2到M個關鍵字,非葉子結點存儲指向關鍵字範圍的子結點;所有關鍵字在整顆樹中出現,且隻出現一次,非葉子結點可以命中;
B+樹:在B-樹基礎上,為葉子結點增加連結清單指針,所有關鍵字都在葉子結點中出現,非葉子結點作為葉子結點的索引;B+樹總是到葉子結點才命中;
B*樹:在B+樹基礎上,為非葉子結點也增加連結清單指針,将結點的最低使用率從1/2提高到2/3;