Algorithm 当所有节点都是单节点时,如何在B树中删除

Algorithm 当所有节点都是单节点时,如何在B树中删除,algorithm,b-tree,Algorithm,B Tree,我正在研究非常棒的维基百科上给出的B树示例(我正在使用维基百科,因为Stackoverflow告诉我 我对这棵树的建造很满意 …我觉得算法很优雅 我的问题是Wikipedia上关于删除节点的描述似乎缺少一个案例。针对“删除后重新平衡”给出的三个案例是: 如果缺陷节点的右同级存在并且元素数超过最小值,则向左旋转 否则,如果缺陷节点的左同级存在并且元素数超过最小值,则向右旋转 否则,如果两个直接同级只有最少数量的元素,则与同级合并,并将其分隔符从其父级移除 如果缺陷节点没有兄弟节点(例如,在上

我正在研究非常棒的维基百科上给出的B树示例(我正在使用维基百科,因为Stackoverflow告诉我

我对这棵树的建造很满意

…我觉得算法很优雅

我的问题是Wikipedia上关于删除节点的描述似乎缺少一个案例。针对“删除后重新平衡”给出的三个案例是:

  • 如果缺陷节点的右同级存在并且元素数超过最小值,则向左旋转
  • 否则,如果缺陷节点的左同级存在并且元素数超过最小值,则向右旋转
  • 否则,如果两个直接同级只有最少数量的元素,则与同级合并,并将其分隔符从其父级移除
如果缺陷节点没有兄弟节点(例如,在上面的树中,删除“1”,“3”现在有缺陷并且没有兄弟节点),则所有这些都没有帮助

我的问题是,缺失的案例是什么(假设我理解正确),维基百科页面应该说什么

例如,在上面的树中,删除“1”,“2”现在有缺陷,并且没有同级

是的,它有一个同级节点:节点(6,\)。如果没有同级节点,则您是根节点


因此,在这种情况下,我们应用选项3,最终得到一个两级树。

哎呀-我键入了“2”,而不是“3”,但这可能已经给出了答案-你是说叶节点从来都不存在缺陷-只是内部节点?我可以做到这一点…@Joe你可以简单地删除空叶节点,是的。但是父节点可能存在缺陷,其中c如果你需要重新平衡