几乎所有关于二叉搜索树的教科书和网站都没有真正谈论二叉树!他们向您展示了三元搜索树!真正的二叉树将数据存储在其叶子而不是内部节点中(导航键除外)。有人称这些叶子树,并区分教科书中显示的节点树:
J。 Nievergelt,C.-K。 Wong:二叉树总路径长度的上限,
期刊 ACM 20 (1973) 1-6。
以下内容来自 Peter Brass 关于数据结构的书。
2.1 两种搜索树模型
在刚刚给出的大纲中,我们隐藏了一个起初看起来很重要的点
微不足道,但实际上它导致了两种不同的搜索树模型,
它可以与以下大部分材料结合使用,但其中之一
是非常可取的。
如果我们将每个节点中的查询键与包含在
如果查询键较小,则节点并跟随左分支并且右分支
如果查询键更大,那么如果它们相等会发生什么?两种型号
搜索树如下:
如果查询键小于节点键,则取左分支;否则采取
右分支,直到你到达树的叶子。内部节点中的键
树的只用于比较;所有的物体都在叶子里。
如果查询键小于节点键,则取左分支;选择正确的分支
如果查询键大于节点键;并取包含的对象
如果它们相等,则在节点中。
这个小问题有很多后果:
{ 在模型 1 中,底层树是二叉树,而在模型 2 中,每个
树节点实际上是一个具有特殊中间邻居的三元节点。
{ 在模型 1 中,每个内部节点都有一个左子树和一个右子树(每个都可能是
树的叶节点),而在模型 2 中,我们必须允许不完整
节点,其中左子树或右子树可能丢失,并且只有
比较对象和键保证存在。
所以模型 1 的搜索树的结构比树的结构更规则
模型2;至少对于实施而言,这是一个明显的优势。
{ 在模型 1 中,遍历一个内部节点只需要一次比较,
而在模型 2 中,我们需要两个比较来检查这三个
可能性。
确实,模型 1 和 2 中相同高度的树最多包含大约
相同数量的对象,但需要在模型中进行两倍多的比较
2 到达树的最深处。当然,在模型 2 中,还有
一些更早到达的对象;找到根中的对象
只有两次比较,但几乎所有对象都在最深处或附近
级别。
定理。高度为 h 且模型 1 的树最多包含 2^h 个对象。
高度为 h 且模型 2 的树最多包含 2^h+1 - 1 个对象。
这很容易看出,因为高度为 h 的树具有左右子树 a
每棵树的高度最多为 h - 1,在模型 2 中,在两者之间增加一个对象
他们。
{ 在模型 1 中,内部节点中的键仅用于比较,并且可能
重新出现在叶子中以识别物体。在模型 2 中,每个
key 和它的对象只出现一次。
在模型 1 中甚至可能有用于比较的键
不属于任何对象,例如,如果对象已被删除。经过
从概念上分离这些比较和识别的功能,这
不足为奇,在后来的结构中,我们甚至可能需要定义人工
测试不对应任何对象,只是为了得到良好的搜索划分
空间。用于比较的所有键都必须是不同的,因为在模型中
1棵树,每个内部节点都有非空的左右子树。所以每个键
最多出现两次,一次作为比较键,一次作为识别键
叶子。
模型 2 成为首选的教科书版本,因为在大多数教科书中
对象和它的键之间没有区别:键是对象。
然后在树结构中复制键变得不自然。但在
在所有实际应用中,key 和 object 之间的区别是相当重要的。
人们几乎从不希望只跟踪一组数字。号码
通常与一些进一步的信息相关联,这通常是很多
大于密钥本身。