data-structures - 2阶B树是满二叉树吗?

标签 data-structures tree b-tree

当我搜索上述问题时,我得到了答案

满二叉树的定义如下:

A full binary tree (sometimes proper binary tree or 2-tree) is a tree in which every node other than the leaves has two children.

但问题是,每次构建 2 阶 B-Tree 时,这个属性可能都不会满足。

例如:

Insert 10,17,45 in a B-Tree of order 2

我们得到的结构是

10
   17
      45

这不是一个完整的二叉树。

那么为什么说 2 阶 B 树是满二叉树呢?

最佳答案

对于 B 树来说,“顺序”这个术语的定义非常糟糕,几乎没有什么用处……每个人都以不同的方式使用这个术语。

尽管如此,对于任何类型的 B 树,节点中指针的数量由该节点中键的数量决定。如果键的数量为 k,则指针的数量为 k + 1。与其他类型的树一样,指针的数量无法选择。节点中的所有指针要么为零(单级“树”中的根,叶子),要么全部有效,没有中间状态,没有混合。

其次,为了使 B 树发挥作用,需要选择键的数量。这意味着最小可能的 B 树节点是具有一个或两个键(因此具有两个或三个指针)的节点。这基本上是一棵 (2,3) 树,据报道这正是 B 树的发明方式 - 作为 (2,3) 树的推广。

将键 10、17 和 45 插入到尽可能最低顺序的空 B 树中将如下所示:

[]

[10]

[10 17]

   [17]
[10]  [45]

最终结果确实看起来像一棵平衡二叉树。

但是,由于上述原因,从您似乎使用该术语(每个节点最多有两个指针)的意义上来说,不存在 2 阶 B 树这样的东西。当向这种退化 B 树中插入多个键时,不可能维持 B 树不变量。

注意:有无数的 B 树变体,它们允许暂时甚至永久地违反经典 B 树的结构不变量,主要是为了实现性能目标、简化维护或实现无锁等特殊属性并发操作。出于本次讨论的目的,这些不会被算作正确的 B 树,即使它们的名称中可能包含“B 树”。

关于data-structures - 2阶B树是满二叉树吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36527304/

相关文章:

java - 如何制作具有多种类型节点的树并且每个节点可以在java中有多个子节点

c++ - 如何从外部函数 C++ 访问动态结构?

c# - 对链表进行排序

java - 在 Eclipse 中禁用 TreeViewer 的 Alt+Enter

Oracle索引默认使用b-tree还是b+tree?

postgresql - 为什么 postgres "scan index(btree)"计划阶段返回所有行?

mongodb - B树是如何在Mongodb中创建的

java - 为什么 HashSet 的内部实现创建一个 HashMap 来存储它的值?

java - 如何在Java数据结构中实现多类别?

postgresql - Postgres : Best way to query hierarchy structures by name