C++ 从中计算AVL树节点平衡';s子节点';平衡
假设我有一个AVL树,它的节点将自己的平衡因子存储为单个整数 如果我知道节点N的左子节点和右子节点的平衡因子,如何计算节点N的平衡因子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 / \ / \ /
请注意,我没有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树是高度平衡的。你也可以用两种方式平衡树,但我想它要慢得多。