我正在寻找计算AVL树中节点平衡的最佳方法。 我以为我有它的工作,但经过一些沉重的插入/更新,我可以看到,它不工作正确(在所有)。 这是一个由两部分组成的问题,第一部分是如何计算子树的高度,我知道定义“节点的高度是从该节点到叶的最长下降path的长度“。 我明白了,但是我没能实施。 为了进一步使我迷惑,可以在维基百科树形高度上find这个引用。 “传统上,值-1对应于没有节点的子树,而零对应于具有一个节点的子树。 第二部分是在AVL树中获得子树的平衡因子,对于“得到L和R子树的高度并从L减去R ”这个概念我没有任何问题。 这是这样定义的: BALANCE = NODE[L][HEIGHT] – NODE[R][HEIGT] 在维基百科上阅读时,在描述插入AVL树的前几行中说: “如果平衡因子变成-1,0或1,那么树仍然是AVLforms,不需要旋转。 然后继续说: “如果平衡因子变成2或-2,那么以此节点为根的树就不平衡了,需要进行树的旋转,最多只需要一次或两次旋转来平衡树。 – 我没有任何困难抓住。 但是(是的,总有一个但是)。 这里是令人困惑的地方,文字指出“如果R的平衡因子是1,则意味着插入发生在该节点的(外部)右侧,并且需要左旋转” 。 但从理解的文字(正如我所引述的)所说,如果平衡因素在[-1, 1]之内[-1, 1]那么就不需要平衡了? 我感觉自己如此接近于理解这个概念,我已经把树轮旋转了下来,实现了一个普通的二叉search树,并且在抓AVL树的边缘,但是似乎缺less了那个重要的顿悟。 编辑:代码示例优于学术公式,因为我总是有更容易的时间抓住代码的东西,但任何帮助,非常感谢。 编辑:我希望我能标记所有的答案为“接受”,但对我来说,NIck的答案是第一个让我去“哈哈”。