这个B +树有效吗?

时间:2014-03-06 17:32:17

标签: data-structures tree b-tree b-plus-tree

在B +树中,是否存在非叶节点,以便删除其键值?这意味着B +树在其中间非叶节点中具有值,但在其任何叶节点中都没有。

考虑以下结构。我在研究B +树时偶然发现了这一点。在该结构中,13不是叶节点。但它是一个非叶子节点。 (事实上​​,它已在之前的说明中被删除。Link for the picture。在此链接中转到页面底部)

The image of the tree I don't understand

如果是,那么数据如何被删除?

这是一个错误还是我遗失了什么?

1 个答案:

答案 0 :(得分:1)

您发布的图片有效。此树返回的唯一数据是您在最后一行中找到的数据。因为13已从树中删除,所以它已从最后一行中删除。非叶子节点中存在13的事实对您的结果没有影响,在遍历树时,它只是一个可比较的值。在这种情况下,如果13更改为16(基于上述约定),则树的行为会有所不同。

Douglas Fisher在B +树上做了一个全面的视频系列,比阅读文章更容易学习。第1部分可以找到here


修改:我在评论中的回答太长了,所以我会把它放在这里。另外这是有用的信息。

如果您正在搜索12,并且到达13,则会比较IS 12 < 1313 <= 12,左边是真的,所以你将会向下走到左边的叶子。无论13是否为16,都会发生这种情况,因为这也是正确的12 < 16

如果您正在搜索16并且到达13,则会比较IS 16 < 1313 <= 16,正确的表达式为true,因此您将遍历到右叶。然后你会在那里找到16的值。

如果您要搜索13(不存在),您会询问IS 13 < 1313 <= 13,右侧表达式为真,因此您将向右移动叶子,发现那里没有13,你会发现13没有价值。