B树插入删除思路

252 阅读2分钟

这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战

B树的插入: 我们知道B树的每个结点(除根结点):每一层的关键码个数n **⌈m/2⌉-1 <= n <= m-1 **

在知道这个的前提之上我们对B树进行插入我们就需要主要一些问题:若插入结点的位置其关键字个数已经大于m-1了 很明显这是不满足B树性质的 因此需要进行分裂 分裂一定要注意是向上分裂(若向上分裂发现父节点也不满足调节则继续向上分裂 这样也会是高度增加一),那对于这个结点如何选择哪一个关键字进行向上分裂呢?一般选择的改结点的中间关键字向上一分为二(⌈m/2⌉处);当然插入的位置关键字个数小于m-1可以直接插入。

B树的插入我们要记住的关键点就是:

  • 1.确定是几阶B树,再判断每个结点不能超过多少个关键字

  • 2.结点插入时选选择插入的位置,确定好插入位置 判断插入的结点位置关键数个数,若满足<m-1则直接插入若大于

  • 3.大于则需要进行向上分裂,分裂到满足B树的性质即可

我们在删除时要关注结点关键字的上限

B树删除

1.若删除的结点为终端结点,则要根据结点关键字个数下限去出发去考虑

  • 删除终端结点 且删除后的关键字满足下限则直接删除
  • 删除终端结点,但删除后的关键字不满足下限,则结关键字:右兄弟够借,则把当前结点的后继去顶替删除的关键字位置,再把这个后继的后继去顶替其原来的位置(简单离家就是都往前移动一个位置);若左左兄弟够借,则移动的就是前驱位置;若左右都不够借,此时就需要合并,需要将父结点中的关键字与左(或右)兄弟进行合并
  1. 若删除结点为非终端结点,用直接前驱或者后继去代替这个位置,最后转化为终端结点的删除(其中直接前驱就是左边最左结点的最左关键字,后继则是右边最有结点中最右关键字)

我们在删除时要关注结点关键字的下限制