B-樹的刪除過程介紹
上文http://m.fzitv.net/article/154157.htm我們介紹了B-樹的插入過程,本文我們來介紹B-樹的刪除過程。
在B-樹中刪除節(jié)點(diǎn)時,可能會發(fā)生向兄弟節(jié)點(diǎn)借元素,和孩子節(jié)點(diǎn)交換元素,甚至節(jié)點(diǎn)合并的過程。
我們以下面的樹為基礎(chǔ),進(jìn)行刪除操作。

首先明確一下這個樹的定義。它是一個5階樹。所以,每個節(jié)點(diǎn)內(nèi)元素個數(shù)為2~4個。
我們依次刪除8、16、15、4這4個元素。
首先刪除8,因為刪除8后,不破壞樹的性質(zhì),所以直接刪除即可。得到如下

然后刪除16,這導(dǎo)致該節(jié)點(diǎn)只剩下一個13節(jié)點(diǎn),不滿足節(jié)點(diǎn)內(nèi)元素個數(shù)為2~4個的要求了。所以需要調(diào)整。這里可以向孩子借節(jié)點(diǎn),把17提升上來即可,得到下圖。這里不能和兄弟節(jié)點(diǎn)借節(jié)點(diǎn),因為從3,6節(jié)點(diǎn)中把6借走后,剩下的3也不滿要求了。另外,也不能把孩子中的15提升上來,那樣會導(dǎo)致剩下的14不滿足要求。

然后刪除15,刪除15后同樣需要調(diào)整。調(diào)整的方式是,18上升,17下降到原來15的位置,得到下圖。

然后刪除元素4,刪除4后該節(jié)點(diǎn)只剩下5,需要調(diào)整。可是它的兄弟節(jié)點(diǎn)也都沒有多余的節(jié)點(diǎn)可借,所以需要進(jìn)行節(jié)點(diǎn)合并。節(jié)點(diǎn)合并時,方式會有多種,我們選擇其中的一種即可。這里,我們選擇父節(jié)點(diǎn)中的3下沉,和1,2,以及5進(jìn)行合并,如下圖。

但這次調(diào)整,導(dǎo)致6不符合要求了。另外,6非根節(jié)點(diǎn),但只有2個孩子,也不符合要求。需要繼續(xù)調(diào)整。調(diào)整的方式是,將10下沉,和6,以及13,18合并為根節(jié)點(diǎn),如下圖。

結(jié)束。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
查詢數(shù)據(jù)庫空間(mysql和oracle)
本文通過代碼示例詳細(xì)介紹了如何查詢MySQL數(shù)據(jù)空間和Oracle數(shù)據(jù)空間,具有一定的參考價值,感興趣的小伙伴可以參考閱讀2023-04-04
windows 64位下mysql 8.0.13 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了windows 64位下mysql 8.0.13 安裝配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11

