【问题标题】:Calculating AVL tree node balance from it's children nodes' balances从其子节点的余额计算 AVL 树节点余额
【发布时间】:2013-12-27 18:33:32
【问题描述】:

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

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

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

【问题讨论】:

  • 也许你误解了平衡的概念。您可以通过两种方式平衡一棵树:高度平衡和重量平衡。我刚刚构建了一个 leftHeight=4 和 rightHeight=3 的高度平衡树。但是,leftCount=15 而 rightCount=4。我猜您所指的平衡因子与重量比高度有关,这意味着左右的项目数相差不超过 1,而高度平衡树并非总是如此。 AVL 树是高度平衡的。
  • 你也可以双向平衡一棵树,但我想它要慢得多。

标签: c++ data-structures binary-tree avl-tree tree-balancing


【解决方案1】:

简短的回答 - 你不能。

长答案:

考虑这两棵树:

           A
        /     \
     B           C                   A
   /   \       /   \                / \
  D     E     F     G              B   C
 / \   / \   / \   / \
H   I J   K L   M N   O

它们具有相同的平衡因子,但它们的高度不同。

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

【讨论】:

  • 我现在明白了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
相关资源
最近更新 更多