B樹
是一種平衡的多路搜索樹,多用於文件系統、數據庫的實現數據庫
- 1個節點能夠存儲超過2個元素、能夠擁有超過2個子節點
- 擁有二叉搜索樹的一些特質(小的子節點在左面 大的子節點在右面)
- 平衡,每一個節點的全部子樹高度一致
- 比較矮
m階B樹性質
一個節點最多擁有m個子節點3d
- 假設一個節點存儲元素個數爲x
- 若是有子節點
- 根節點上的子節點:

- 非跟節點上的子節點:

celing爲向上取整cdn
- 若是要是m = 3
- 他的子節點個數爲
,所以可稱爲(2,3)樹、2-3樹。
- 若是要是m = 4
- 他的子節點個數爲
,所以可稱爲(2,4)樹、2-3-4樹。
- 若是要是m = 5
- 他的子節點個數爲
,所以可稱爲(3,5)樹、3-4-5樹。
B樹和二叉搜索樹的關係
- B樹其實適合二叉搜索樹是等價的
- 只要把二叉搜索樹和部分子節點與父節點結合就生成了b樹
- 多代節點合併,能夠得到一個超級節點
- m階B樹最多須要
代合併
搜索
- 一、如今節點內部從小到大搜索元素
- 二、若是命中,搜索結束
- 三、若是未命中,再去對應的子節點去搜索元素,重複步驟1
添加
元素必然是添加到葉子節點中blog
上溢
- 假設3階B樹,當節點添加第三個數據的時候(最多添加兩個) 叫上溢
假設B樹的階級爲m, 上溢節點最中間的節點爲kit
解決上溢
- 將k位置的元素向上與父節點合併
- 將[0,k - 1]和[k + 1,m - 1]位置的元素分裂成兩個子節點
- 這兩個子節點的元素個數,必然都不會低於最低限制(ceiling(m/2) - 1)
- 一次分裂完畢後,可能致使父節點上溢,重複上述方法
以4階B樹添加舉例
刪除
葉子節點
直接刪除io
非葉子節點
- 找到前驅或者後繼,覆蓋刪除所須要的元素的值。
- 在把前驅或者後繼刪掉。
- 非葉子節點的前驅或者後繼必然在葉子節點中
下溢
- 假設5階B樹,葉子節點最低個數爲ceiling(m/2) - 1 = 2個 當刪除後只剩下一個的時候 稱爲下溢
解決下溢:
- 下溢的元素必然是ceiling(m/2) - 1 個
- 若是下溢的節點的臨近兄弟節點至少有(ceiling(m/2))個元素,能夠向其借一個元素(最後一個元素)
- 將父節點最後一個元素插入到下節點的最小位置
- 將借來的元素插入到父節點最小位置
- 若是下溢的節點的臨近兄弟節點只有(ceiling(m/2)) - 1
- 將父節點的中間元素挪下來與左右子節點進行合併
- 合併後的節點元素等於ceil(m/2) + ceil(m/2) - 2; 不超過m - 1
- 可能致使父節點下溢,下溢可能一直向上傳播。(若是根節點下溢 就和子節點合併)
以4階B樹刪除舉例
喜歡的能夠關注下個人公衆號,會在第一時間更新class