淺析B-樹分裂

一、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值時,則往左子樹裏面查找;若大於時,往右子樹裏 面找。一直重複下去,最後返回需要插入的位置。

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

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

發佈了55 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章