C++ 从中计算AVL树节点平衡';s子节点';平衡

C++ 从中计算AVL树节点平衡';s子节点';平衡,c++,data-structures,binary-tree,avl-tree,tree-balancing,C++,Data Structures,Binary Tree,Avl Tree,Tree Balancing,假设我有一个AVL树,它的节点将自己的平衡因子存储为单个整数 如果我知道节点N的左子节点和右子节点的平衡因子,如何计算节点N的平衡因子 请注意,我没有rHeight和lHeight,因此bal(N)=lHeight-rHeight不是一个选项。简短回答-你不能 长答覆: 以这两棵树为例: A / \ B C A / \ / \ /

假设我有一个AVL树,它的节点将自己的平衡因子存储为单个整数

如果我知道节点N的左子节点和右子节点的平衡因子,如何计算节点N的平衡因子


请注意,我没有rHeight和lHeight,因此bal(N)=lHeight-rHeight不是一个选项。

简短回答-你不能

长答覆:

以这两棵树为例:

           A
        /     \
     B           C                   A
   /   \       /   \                / \
  D     E     F     G              B   C
 / \   / \   / \   / \
H   I J   K L   M N   O
它们有相同的平衡因子,但它们的高度不同


因此,如果你只有子树的平衡因子,你不知道子树有多高,因此你不能只用它来计算父树的平衡因子。

我现在明白了。非常感谢。也许你误解了平衡的概念。你可以用两种方式平衡一棵树:高度平衡和重量平衡。我刚刚构建了一个高度平衡树,它的leftHeight=4,rightHeight=3。但是,leftCount=15,而rightCount=4。我猜你提到的平衡因子与重量有关,而不是与高度有关,这意味着左右两侧的项目计数相差不超过1,这在高度平衡树中并不总是如此。AVL树是高度平衡的。你也可以用两种方式平衡树,但我想它要慢得多。