B树学习笔记之B树的删除

B树的下溢发生于删除关键码后违反了B树的性质 。

B树学习笔记之B树的删除_第1张图片

一. 旋转

  • 如果左右兄弟存在,则间接向左右兄弟借关键码

    B树学习笔记之B树的删除_第2张图片

二. 合并

B树学习笔记之B树的删除_第3张图片

B树高度的减少只会发生于根节点的两个孩子合并 。

三. 实例

B树学习笔记之B树的删除_第4张图片

1. 删除249

B树学习笔记之B树的删除_第5张图片

不急于合并,先左顾右盼,向有兄弟接一个关键码。

B树学习笔记之B树的删除_第6张图片

删除操作顺利结束。

2. 删除619

B树学习笔记之B树的删除_第7张图片

664没有左兄弟,右兄弟处于即将下溢的边缘临界状态,旋转技巧已不适用,选择合并。

B树学习笔记之B树的删除_第8张图片

此时,父节点发生了下溢,继续合并。

B树学习笔记之B树的删除_第9张图片

整棵B树的高度降低了一层,这时B树高度得以下降的唯一可能。

四. 总结

B树被设计成相对矮宽,而对B树的访问是由一系列的外存操作内存操作交替组成的。有多少外存操作,就有多少内存操作。但要使外存操作的代价与内存操作的代价大致相当。B树能做到,而AVL与BBST却做不到

  • 水平方向:对应与每个节点的内部搜索,在内存(RAM)中进行。
  • 垂直方向:对应于磁盘(Disk)操作。树中每下降一层,就要付出一次IO操作的代价。

B树学习笔记之B树的删除_第10张图片

你可能感兴趣的:(Data,Structure)