【问题标题】:Balance factor of nodes in AVL TreeAVL 树中节点的平衡因子
【发布时间】:2009-12-31 19:33:46
【问题描述】:

要计算 AVL 树中节点的平衡因子,我们需要找到其左子树的高度和右子树的高度。然后我们用左子树的高度减去右子树的高度:

balancefactor = leftsubtreeheigh - rightsubtreeheight

我的问题是:如何计算左子树或右子树的高度?

例如在给定的图中1根节点40的左子树的高度为4,而40的右子树的高度为2,所以高度差为2。

如何在 C++ 中做到这一点?我不想使用递归,因为它非常令人困惑。使用显式堆栈而不是递归更容易理解。


1该图已从imgur服务器中删除。

【问题讨论】:

标签: c++ avl-tree


【解决方案1】:

节点的深度比其最深子节点的深度大 1。

您可以通过递归非常简单地做到这一点。

unsigned int depth(node *n)
{
    if (n == NULL)
        return 0;
    else
        return MAX(depth(n->left), depth(n->right)) + 1;
}

【讨论】:

    【解决方案2】:

    -1、0 和 +1 是 AVL 树的三个平衡状态。

    平衡因子是树的left height - right height。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多