B树可以采用二叉树的形式吗

Can a B-Tree take on the form of a binary tree

在数据库系统的 CS 考试中,问题是使用 B 树索引在给定系统中查找记录的最大块访问数是多少。 B 树的阶数为 4,最大条目数是当所有内部节点都半满时(因为如果它们少于半满,它们将与邻居合并)。因此,当每个节点都有 2 个子树指针时,树处于最高深度(并且最大访问次数等于树的深度)。但这将有效地赋予树与二叉树相同的结构,因为每个节点只包含一个数据和两个指针。

所以问题是这样的:

有了插入和删除的策略,在物理上是否可以按允许树采用这种形式的顺序插入和删除节点,或者它总是会合并并减少树的深度?

当然可以。

这样的二叉树只靠插入是不可能实现的,但是一旦你在一个4度b-tree中插入了一堆键(数据元素),你就可以从叶子中删除键所以以二叉树形状为目标。

您将为二叉树设定特定的树高度,因此首先进行足够的插入以获得具有该高度的 B-tree。然后消除键以减少非二进制节点的程度,从树的顶层开始,向下工作。

一个例子

假设您要创建这样一棵高度为 3 的树。为此,我们会将值 1 到 13 插入到空树中。这将导致这棵树:

                    [9] 
     [3,     6]               [12] 
[1, 2] [4, 5] [7, 8]   [10, 11]  [13] 

现在为了在我们目前有 [3, 6] 的地方只获得一个密钥,我们需要摆脱它的一个 children。所以让我们删除 7 和 8:

删除8后,标准算法会将值5从[4, 5]“旋转”到它的parent,并将parent键(6)注入child 我们删除了 8:

               [9] 
     [3,  5]             [12] 
[1, 2] [4]  [6]   [10, 11]  [13] 

我们在同一个节点还是有太多的children,所以我们继续删除6。现在有一个叶子的合并,会减少我们最初想减少的节点:

             [9] 
     [3]               [12] 
[1, 2] [4, 5]   [10, 11]  [13] 

现在所有 non-binary 个节点都在底层。我们现在可以删除键 2、5 和 11 以获得二叉树:

       [9] 
  [3]        [12] 
[1] [4]   [10]  [13] 

一般

同样的原则也适用于更高的树。只需从 non-binary 的内部节点子树中删除键,直到它们被删除。在某些时候会发生合并,这将降低 non-binary 节点的程度,最终使它们成为二进制。

如果你从上到下这样做,你将一层又一层二进制化,最后底层也是二进制化。