当我搜索上述问题时,我得到了答案Yes
。
完整二叉树的定义如下:
完整的二叉树(有时是适当的二叉树或2树)是一棵树,其中叶子以外的每个节点都有两个孩子。
但问题是,每次构造2阶B树时,这个属性可能都不满足。
例如:
将10,17,45插入2阶B树中
我们得到的结构是
10
17
45
这不是完整的二叉树。
那么为什么它说2阶B树是一个完整的二叉树?
答案 0 :(得分:3)
对于B树来说,“秩序”这个术语的定义很差,几乎没用......每个人都以不同的方式使用这个术语。
尽管如此,对于任何类型的B树,节点中指针的数量由该节点中的键数确定。如果键的数量是k,那么指针的数量是k + 1,周期。关于指针的数量没有选择,因为其他类型的树可能存在。节点中的所有指针都是nil(单个“树”中的根,离开)或者都是有效的,没有中间的,没有混合。
其次,为了使B树起作用,需要在键的数量上进行选择。这意味着最小的B树节点是具有一个或两个键(因此有两个或三个指针)的节点。这基本上是一个(2,3)-tree,据说这正是B树的发明方式 - 作为(2,3) - 树的概括。
将键10,17和45插入到可能最低顺序的空B树中将如下所示:
[]
[10]
[10 17]
[17]
[10] [45]
最终结果确实看起来像一个平衡的二叉树。
但是,由于上面所示的原因,在你似乎使用这个术语(每个节点最多两个指针)的意义上没有2阶B树。在将多个密钥插入到这样的简并B树中时,不可能保持B树不变量。
注意:有大量的B树变体允许暂时或甚至永久地违反经典B树的结构不变量,主要是为了达到性能目标,简化维护或实现无锁等特殊属性并发操作。为了讨论的目的,这些不会被视为适当的B树,即使它们的名字中可能有“B-tree”。
答案 1 :(得分:0)
根据Fundamentals of Data Structure in C++ by Horowitz
,它提到2阶B树确实必须是完整树。但是,任何2级(具有1个或2个子级)的树(任何数量的节点)都不能成为B树,只有具有2^k
个节点的树才能形成2级的B树。它也提到对于order > 2
的B树,任何数量的节点都可以形成order > 2
的B树。也就是说,阶数为2的B树是B树的一种特例。
答案 2 :(得分:0)
为了回答这个问题,我们先来看看 m 阶 B 树的定义:
注意,由于 B 树也是 m-way 搜索树,每个具有 p 个内部节点的节点应该有不少于 p + 1 个子节点.因此,由于二阶 B 树要求每个节点的子节点不少于 2 个,每个节点的子节点不超过 2 个,因此 m 阶 B 树是一个完整的 BST。