假设我有一系列键值要插入到任何给定顺序的B树中。插入所有元素后,我正在对其中一些元素执行删除操作。它是否总是给出一个独特的结果(以B树的形式),或者它可以根据删除操作而有所不同?
引自wiki:
链接:https://en.wikipedia.org/wiki/B-tree
从内部节点删除
内部节点中的每个元素都充当两个分隔值 子树,因此我们需要找到一个替代分离。注意 左子树中最大的元素仍然小于 分隔器。同样,右子树中的最小元素是 仍然大于分隔符。这两个元素都在叶子中 节点,任何一个都可以是两个子树的新分隔符。 算法描述如下:
选择一个新的分隔符(左子树中的最大元素或右子树中的最小元素),将其从 它所在的叶节点,并用。替换要删除的元素 新的分隔符。
上一步从叶子中删除了一个元素(新分隔符) 节点。如果该叶节点现在不足(少于所需的叶节点) 节点数),然后从叶节点开始重新平衡树。
我认为根据删除操作,它可能会有所不同,因为上面的行以粗体字母引用。我对吗?帮助:)
答案 0 :(得分:2)
如果您的问题是两个包含完全相同的键值集合的B树是否总是具有相同的节点,则答案为否。
请注意,对于例如简单的二叉树。
但是,在B树的情况下,这可能会更加明显,因为B树已经过优化,可以最大限度地减少页面更改,从而需要回写缓慢的二级存储。