我的教授正在做关于B + Trees删除的讲座,我感到非常困惑。根据他删除B +树中的任何密钥:
1- First navigate to the leaf *L* where it belongs.
2- If the *L* is at least half full if you can simply delete it.
3- If it contains d-1 elements then you need to redistribute and merge.
如果你看到下面的图片,我想在这里删除B +树中的19和20。
从B + Tree删除19和20后。
问题:
我很困惑为什么在这里需要重新分配和合并?如果您只是简单地从叶节点中删除19和20而没有任何分布,它应该正常工作吗?为什么要在这里进行重新分配?谁能解释一下?
是因为24的左指针指向20但没有指向19。 这就是为什么需要重新分配20而不是19。
答案 0 :(得分:1)
B +树是一种自我平衡的搜索树。
自平衡树需要保持最大树深度与其所拥有的元素数量的某个对数成比例。
B +这样做,在插入和重新分发时拆分并添加图层,删除时删除节点。
答案 1 :(得分:0)
好的我理解了这个问题。
B +树的属性。
所有叶子应该在相同的深度,每个叶子节点中的mininum元素应该等于树的深度。请参阅以下示例:
所有树叶的深度相同,此处d = 2.
d
到2*d
个键,除了根目录。d + 1
到2*d + 1
个子指针。在下面给出的B + Tree中,除了可能的根之外,每个节点都有2
和2*2
个数据条目。每个节点最少有2个键。
只有B + Tree的root只能少于d键,这是我们唯一的例外。
在我的问题中,当您删除19
时,不会违反B + Tree的属性,但是当您删除20
时,节点中包含的元素总数小于d。因此必须执行重新分配和合并,以便不违反B +树的属性。