【发布时间】:2012-08-23 08:42:48
【问题描述】:
这已经在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 是树中元素的数量。这是一个正确的解决方案吗?
【问题讨论】:
-
您似乎没有使用
node并且您不需要if()语句,您可以只返回布尔值。否则它看起来很适合 自平衡二叉树 en.wikipedia.org/wiki/Self-balancing_binary_search_tree -
是的,这段代码是从另一个函数中复制而来的,然后添加了一个名称 isBalanced。这就是我不使用节点的原因。
-
正如阿米特所说,这将确定树是否具有最小平衡高度。它可能比这更高,但仍然是平衡的。
-
哦,我明白了,我对平衡树的定义是“最小高度”。所以实际的定义是“树中的任何节点都应该有高度相同或相差 1 的子树”
-
公平地说,平衡树的最大高度总是大于 log(n)。如果你有三个元素,这意味着你有两个元素,log(3) = 1.6 和 log(7) = 2.8(3 级深)。这是您在计算中添加 1 的原因吗?
标签: java algorithm data-structures tree binary-tree