【问题标题】:Complete binary tree definitions完整的二叉树定义
【发布时间】:2012-08-11 14:17:18
【问题描述】:
我有一些关于二叉树的问题:
Wikipedia 指出,二叉树是complete,当“完全二叉树是一种二叉树,其中除了可能的最后一层,每一层都被完全填满,并且所有节点都为尽可能远。”最后一段“尽可能向左”是什么意思?
如果 (1) 它是空的,或者 (2) 它的左右子树高度平衡并且左侧树的高度为在右树高度的 1 以内,取自 How to determine if binary tree is balanced?,这是正确的还是 1 值上有“抖动”?我阅读了我链接的答案,左右树的高度之间也可能存在 4 的差异因子
完整且高度平衡的定义是否仅适用于二叉树或任何其他树?
【问题讨论】:
标签:
algorithm
tree
binary-tree
【解决方案1】:
-
按照维基百科中定义的参考,我得到了
this page。该定义取自那里,但经过修改:
定义:一棵二叉树,其中每一层,除了可能最深的,都被完全填满。在深度 n 处,高度
树,所有节点都必须尽量靠左。
它继续下面的注释,
一棵完整的二叉树在每个深度 k
有时,定义会因方便而异(对某事有用)。据我了解,该段落可能是一种变体,它要求叶节点首先填充最深层次的左侧(即从左到右填充)。我通常找到的定义与上面描述的完全一样,但没有那个
路过。
-
通常对高度平衡树的定义是你
描述。换句话说:
当且仅当每个节点的两个子树的高度最多相差 1 时,树才是平衡的。
该定义取自here。同样,有时定义会更加灵活以服务于特定目的。例如,AVL tree 的定义表明
在 AVL 树中,任意节点的两个子子树的高度
最多相差一个
不过,我记得有一次我必须重写一个算法,以便树
如果任何一个的两个子子树都被认为是高度平衡的
node 最多相差 2。请注意,您给出的定义是递归的,这对于二叉树很常见。
- 在子级数量可变的树中,您不能说它是完整的(任何父级都可以拥有您想要的子级数量)。不过,它可以应用于 n 叉树(具有固定数量的
n 子树)。
【解决方案2】:
完整且高度平衡的定义是否仅适用于二进制
树还是任何其他树?
简短回答:是的,它可以扩展到任何 n 叉树。