AVL树完美平衡问题
Posted
技术标签:
【中文标题】AVL树完美平衡问题【英文标题】:AVL tree perfect balancing issue 【发布时间】:2015-04-28 01:42:52 【问题描述】:我想知道 AVL 树重新平衡是否存在根本问题。根据几个教程,对于 AVL 插入,最多 2 次旋转它可以平衡。但是,这可能取决于所谓的平衡。关注link看树。
最初它有 6 个元素。假设我们将最后一个值插入为 3 或 4.5 或 5.5 或 6.5。无论如何,它将被插入底部的左侧。总共有 7 个元素树,为了完美平衡,我认为它只有 3 行。
这将强制新根为 6 或 6.5(如果我们插入 6.5)。我真的想不出一种在 2 次旋转内重新平衡它的方法。 如果我们只依赖“平衡”的定义,4-rows 仍然被称为平衡,但它会导致更多的搜索时间。
我错过了什么吗?
如果图片被删除,下面是文字版:
7 5 9 4 6 8 空槽 3 或 4.5 或 5.5 或 6.5【问题讨论】:
【参考方案1】:您可以在wikipedia上阅读
在AVL树中,任意节点的两个子子树的高度最多相差1
这并不意味着你有一棵完整的树!请参阅链接的***页面中的余额树示例。
因此,对于您建议的任何插入,您的树在插入后仍将是平衡的(对于平衡的通用定义)
在根的一侧,您将拥有子树
5
4 6 height 2
3 # # #
在 oder 方面,您将拥有子树
9
8 # height 1
因为这 2 个子树的高度差只有 1,所以没关系...您可以检查该属性是否适用于所有节点
【讨论】:
同意你的观点:根据 AVL 树的定义,它仍然是平衡的。我真正的问题是,当它深入时,这是否意味着很多空白点? AVL 的“平衡”方面意味着空点的数量是有限的。这是在大量空白点(这会增加遍历时间)和进行大量旋转(这会增加插入时间)之间的一种折衷 感谢 Amxx。我会买的。以上是关于AVL树完美平衡问题的主要内容,如果未能解决你的问题,请参考以下文章