这已经讨论过了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是树中元素的数量。这是一个正确的解决方案吗?
答案 0 :(得分:6)
此解决方案不正确。如果平衡树的高度为O(lg(n))
,则它是平衡的,因此它(高度)需要小于c*lg(n)
- 对于某些常量c
。您的解决方案假设此常量为1。
请注意,只有complete tree的高度为lg(n)
。
在Fibonacci tree上查找示例,其中 是一个平衡树(实际上是AVL tree的最坏情况)。但是 - 它的高度大于lgn
(~1.44*lg(n)
),建议的算法将返回斐波纳契树不平衡。