淺析B-樹分裂

慵懶de瘋子發表於2018-03-17

一、B-樹的定義(適合查詢的平衡的多叉樹。)
一顆M階(M>2)的B-樹,是一顆平衡的M路平衡搜尋樹,可以是空樹或者滿足B-樹的性質

二、B-樹的性質?
(1) 根節點至少有兩個孩子
(2) 每個非根節點至少有M/2(上取整)個孩子,至多有M個孩子
(3) 每個非根節點至少有M/2-i個關鍵字,至多有M-1個關鍵字,並且以升序排列
(4) key[i]和key[i+1]之間的孩子節點的值介於key[i]、key[i+1]之間
(5) 所有葉子節點都在同一層

三、B-樹分裂圖示
給定一組數:{12 45 9 78 60 55 58}
(1) 先插入12
這裡寫圖片描述
(2) 再插入45
這裡寫圖片描述
(3) 插入9
這裡寫圖片描述
(4) 插入78
這裡寫圖片描述
(5) 插入60
這裡寫圖片描述
(6) 插入55
這裡寫圖片描述
(7) 插入58
這裡寫圖片描述

四、B-樹的基本操作
1、 建立
2、 插入
(1) 若B樹的根為空,則直接插入(new上一個新的節點,插入,更新size )
(2)0當B樹不為空時
a、在B樹中查詢插入位置的key,若找到則不插入返回;若沒找到,則插入到葉子結點。
b、檢測當前插入節點是否滿足B樹的性質,若滿足則返回,不滿足時則需要分裂。(分裂如上所示)

3、查詢(主要查詢兩個方向:一是找key在不在;二是若key不在則找位置)
(1)從B樹的根節點開始查詢(中序遍歷查詢或者折半查詢),若找到則返回;若無則進行下一步
(2)找不到key值時,則需要將key與節點中的key值作比較,小於節點的key值時,則往左子樹裡面查詢;若大於時,往右子樹裡 面找。一直重複下去,最後返回需要插入的位置。

注意點:搬移元素的時候,孩子節點會比關鍵字多搬移一個元素

程式碼沒有附上,讀者可自行編寫!!!