二进制搜索树是否平衡?

时间:2012-08-23 08:42:49

标签: java algorithm data-structures tree binary-tree

这已经讨论过了here,但我在下面有一个实现(从未在线程中讨论过),

public boolean isBalanced(BSTNode node) {
    if(maxHeight() > (int)(Math.log(size())/Math.log(2)) + 1) 
        return false;
    else
        return true;
}

其中maxHeight()返回树的最大高度。基本上我正在检查maxHeight> log(n),其中n是树中元素的数量。这是一个正确的解决方案吗?

1 个答案:

答案 0 :(得分:6)

此解决方案不正确。如果平衡树的高度为O(lg(n)),则它是平衡的,因此它(高度)需要小于c*lg(n) - 对于某些常量c。您的解决方案假设此常量为1。

请注意,只有complete tree的高度为lg(n)

Fibonacci tree上查找示例,其中 是一个平衡树(实际上是AVL tree的最坏情况)。但是 - 它的高度大于lgn~1.44*lg(n)),建议的算法将返回斐波纳契树不平衡。