1. 程式人生 > >B樹的插入和刪除

B樹的插入和刪除

一顆m階的B樹定義如下:

1)Math.ceil(m/2)-1<=非根結點關鍵字個數<=m-1。

2)根結點最少可以只有1個關鍵字。

3)所有葉子結點都位於同一層。

B樹插入操作:

1)根據要插入的key的值,找到葉子結點並插入。

2)判斷當前結點key的個數是否<=m-1,若滿足則插入操作完成;否則進行第3步。

3)以結點中間的key為中心分裂成左右兩部分,然後將這個中間的key插入到父結點中,這個key的左指標指向分裂後的左半部分,這個key的右指標指向分裂後的右半部分,迴圈進行第2步、第3步。

B樹刪除操作:

1)如果當前需要刪除的key位於非葉子結點上,則用後繼key(大於key)覆蓋要刪除的key,然後在後繼key所在的結點中刪除該後繼key。然後執行第2步。

2)已經刪除後繼key的結點的key個數>=Math.ceil(m/2)-1(也就是m階B樹結點關鍵字個數最小要求),結束刪除操作;否則執行第3步(結點關鍵字個數不滿足B樹要求了)。

3)如果兄弟結點key個數大>Math.ceil(m/2)-1,則父結點中的key下移到該結點,兄弟結點中的一個key上移,刪除操作結束。

如果兄弟結點關鍵字個數剛好=Math.ceil(m/2)-1,將父結點中的key下移與當前結點及它的兄弟結點中的key合併,形成一個新的結點。原父結點中的key的兩個孩子指標就變成了一個指標,指向這個新結點。迴圈進行第2步、第3步。

有些結點它可能即有左兄弟,又有右兄弟,那麼我們任意選擇一個兄弟結點進行操作即可。