[英]Is this B+ Tree Valid?
在B +树中,是否可以存在一个非叶节点,以便其键值被删除? 这意味着B +树在其中间非叶节点中具有一个值,但在其任何叶节点中均没有。
考虑以下结构。 我在研究B +树时碰到了这个问题。 在该结构13中不是叶节点。 但这是一个非叶节点。 (实际上,它已在前面的说明中删除。 图片的链接。在此链接中,转到页面底部)
如果是,那么如何删除数据?
这是一个错误还是我缺少什么?
您发布的图片有效。 该树返回的唯一数据是您在最后一行中找到的数据。 由于13
已从树中删除,因此已从最后一行中删除。 非叶节点中存在13
的事实与您的结果无关紧要,当遍历树时,它只有一个可比较的值。 在这种情况下,如果将13
更改为16
(基于上述约定),则树的行为不会有所不同。
道格拉斯·费舍尔(Douglas Fisher)在B +树上做了一个完整的视频系列,与阅读文章相比,学习起来更容易。 第1部分可以在这里找到。
编辑 :我在评论中的回复太长,因此我将其放在此处。 另外,这是有用的信息。
如果要搜索12
并达到13
,则将比较IS 12 < 13
或13 <= 12
,左边为true,因此您将向下遍历到左边的叶子。 无论13
是否为16
都会发生这种情况,因为12 < 16
也是如此。
如果您要搜索16
并达到13
,则将比较IS 16 < 13
或13 <= 16
,正确的表达式为true,因此您将遍历到右边的叶子。 然后,您将在那里找到16
的值。
如果要搜索13
(不存在),则会询问IS 13 < 13
或13 <= 13
,正确的表达式为true,因此您将遍历到右边的叶子并发现那里没有13
并且此时您将被踢出13
没有价值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.