B-树(B树)的删除操作,这里只讲解删除终端结点的情况,因为删除非终端结点可以转化为删除非终端结点。
如下图3阶B树,做如下操作:
(1)删除60 (2)删除80
3阶B树,m=3,除根结点外,每个结点中至少有⌈m/2⌉-1=1个关键字
(1)解:删除60
兄弟够借:结点60中只有一个关键字=⌈m/2⌉-1,该结点的右兄弟中有两个关键字,关键字个数>⌈m/2⌉-1,借用右兄弟结点中的一个关键字,采用的方法是“父子换位”以达到平衡
删除60,用其父结点中的80取代60的位置,将右兄弟中的90移到父元素的位置。
(2)解:删除80
兄弟不够借:结点80中只有一个关键字=⌈m/2⌉-1,此该结点相邻的右兄弟中也只有1个关键字,采用的方法是“兄弟合并”,在删除该关键字的同时,将该结点剩余的关键字和指针连同双亲结点中的 一个关键字合并到(左)右兄弟结点中。
删除80,80所在的结点的父结点与其右兄弟合并,这时父结点的关键字个数为0.破坏了B树的结构,继续整合,将50与40合并成新的结点,最终构造的B树如下