怀疑功能检查树是否平衡?

时间:2011-08-02 19:24:32

标签: algorithm avl-tree tree-balancing

我在一本名为“Coding Interview Cracked”的书中读到,为了检查BST是否平衡,只需找出最大和最小高度之间的差异,但我不确定它是否100%正确。虽然我无法找到反测试案例。

任何人都可以确认这种方法是否正确。

检查树是否平衡。

|MaxHieght(root) - MinHieght(root)| <=1
   return true
else return false

2 个答案:

答案 0 :(得分:3)

鉴于平衡的定义(来自Pedias的Wiki)

  

节点的平衡因子是其左子树减去的高度   右子树的高度(有时相反)和一个节点   平衡因子1,0或-1被认为是平衡的。任何一个节点   其他平衡因素被认为是不平衡的,需要重新平衡   那个树。平衡因子直接存储在每个节点或   根据子树的高度计算。

这似乎是正确的。由于minHeight和maxHeight将等于任何一方的高度,看起来像定义持有

答案 1 :(得分:0)

如果您愿意,也可以尝试这种方式。

bool isBalanced(node curPtr)
{
        static int heightLeft,heightRight; //Need to save previous return value

        if ( !curPtr )
        {
                return 0;
        }

        heightLeft  = isBalanced(curPtr->lChild);
        heightRight = isBalanced(curPtr->rChild);

        ++heightLeft;   // Height of the Tree should be atleast 1 ( ideally )
        ++heightRight;


        return ( ( ( heightLeft - heightRight ) == 0 ) || (( heightRight - heightLeft ) == 0 ) );
}

HTH