6

相信维基百科的文章:http ://en.wikipedia.org/wiki/AVL_tree

AVL 树是高度平衡的,但通常不是重量平衡的,也不是 μ 平衡的;[4] 也就是说,兄弟节点可以有非常不同数量的后代。

但是,作为 AVL 树:

自平衡二叉搜索树 [...]。在 AVL 树中,任何节点的两个子子树的高度最多相差 1

我看不出 AVL 是如何重量不平衡的,因为 - 如果我很好地理解 AVL 树的定义 - 每个兄弟姐妹将有大约相同数量的孩子,因为它们具有相同的高度 +/- 1。

那么,你能给我一个不平衡的 AVL 树的例子吗?我没有成功找到一个。因此,或者我误解了 AVL/未加权树的定义,或者维基百科的文章是错误的......

谢谢

4

2 回答 2

5

您的理解是正确的,AVL 树是由其边缘节点的几乎均匀的高度定义的,但您的困惑似乎是关于节点位置和边缘权重之间的差异。

也就是说:在 AVL 树中,边缘节点的深度将是相同的 +/-(但不是两者!)之一。这没有声称与节点之间的边相关的成本。对于具有根节点和两个子节点的 AVL 树,左侧路径的遍历成本可能是右侧路径的两倍。这将使树的权重不平衡,但仍保持 AVL 树的定义。

此页面包含更多信息:权重平衡树 - 维基百科

来自维基百科:

二叉树称为 μ-balanced,方程如果对于每个节点 N,不等式: mu平衡不等式

成立,并且 μ 在此属性下是最小的。|N| 是以 N 为根(包括根)的树下的节点数,Nl 是 N 的左子树。

本质上,这意味着 AVL 树中的孩子不一定均匀分布在树的最低层。以 N 表示树的根节点,可以构造一棵有效的 AVL 树,它的根左侧的子节点多于其右侧的子节点。对于非常深的树,在这个底层可能有很多节点。

AVL 树的定义要求它们都在最深点之一内,但不能保证它们是相对于节点 N 的子节点。

于 2013-03-21T19:38:08.727 回答
5

兄弟节点可以有非常不同数量的后代。

我只是对这个问题摸不着头脑,事实上我的 AVL 实现生成的树最终并没有不平衡,但里面有越来越大的“远亲”子树。

我画了这个草图来安慰自己:

在此处输入图像描述

红色节点的余额为 1,绿色节点为 -1,黑色节点为 0。这是一个有效的 AVL 树,因为两个兄弟子树之间的高度差永远不会超过 1,但有(几乎)两倍右子树中的许多节点作为左子树。

于 2013-05-10T15:37:20.413 回答