在B +树中,是否存在非叶节点,以便删除其键值?这意味着B +树在其中间非叶节点中具有值,但在其任何叶节点中都没有。
考虑以下结构。我在研究B +树时偶然发现了这一点。在该结构中,13不是叶节点。但它是一个非叶子节点。 (事实上,它已在之前的说明中被删除。Link for the picture。在此链接中转到页面底部)
如果是,那么数据如何被删除?
这是一个错误还是我遗失了什么?
答案 0 :(得分:1)
您发布的图片有效。此树返回的唯一数据是您在最后一行中找到的数据。因为13
已从树中删除,所以它已从最后一行中删除。非叶子节点中存在13
的事实对您的结果没有影响,在遍历树时,它只是一个可比较的值。在这种情况下,如果13
更改为16
(基于上述约定),则树的行为会有所不同。
Douglas Fisher在B +树上做了一个全面的视频系列,比阅读文章更容易学习。第1部分可以找到here。
修改:我在评论中的回答太长了,所以我会把它放在这里。另外这是有用的信息。
如果您正在搜索12
,并且到达13
,则会比较IS 12 < 13
或13 <= 12
,左边是真的,所以你将会向下走到左边的叶子。无论13
是否为16
,都会发生这种情况,因为这也是正确的12 < 16
。
如果您正在搜索16
并且到达13
,则会比较IS 16 < 13
或13 <= 16
,正确的表达式为true,因此您将遍历到右叶。然后你会在那里找到16
的值。
如果您要搜索13
(不存在),您会询问IS 13 < 13
或13 <= 13
,右侧表达式为真,因此您将向右移动叶子,发现那里没有13
,你会发现13
没有价值。