【发布时间】:2014-04-08 04:06:03
【问题描述】:
我无法理解大 O 问题。
问题
public boolean isHB(TreeNode root){
if (root==null)
return tree;
int heightL = height(root.left);
int heightR = height(root.right);
boolean leftHB = isHB(root.left);
boolean rightHB = isHB(root.right);
if (Math.abs(heightL-heightR)>1)
return false;
return leftHB && rightHB;
}
1/ 假设树是高度平衡的。找到大 O,其中 n 是树中的节点数。
2/ 不要假设树是高度平衡的。找到大 O,其中 n 是树中的节点数。
我不明白的地方
1/ 解是:2T(2/n) + O(n) = O(n log(n))。我知道 2T(2/n) 来自哪里,但我不知道 O(n) 来自哪里。
2/ 解是:T(n-1) + O(n) = O(n^2)。在这种情况下,由于树不平衡,我理解 T(n-1),但我仍然无法弄清楚 O(n) 的来源。
【问题讨论】:
-
检查height方法的实现?
-
当然
return tree应该是return true。不过,可爱的错误。 -
我遇到的问题是
return tree,没有给出高度方法:/