AVL树中节点的平衡因子

时间:2009-12-31 19:33:46

标签: c++ avl-tree

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

balancefactor = leftsubtreeheigh - rightsubtreeheight

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

例如,在给定的图 1 中,根节点40的左子树的高度为4,右子树的高度为40,因此高度的差异是2。

如何在C ++中执行此操作?我不想使用递归,因为它非常令人困惑。使用显式堆栈而不是递归更容易理解。


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

2 个答案:

答案 0 :(得分:5)

节点的深度比它最深的孩子的深度多1倍。

你可以通过递归非常简单地完成这项工作。

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

答案 1 :(得分:5)

-10+1是AVL树的三种平衡状态。

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