我为一些二叉树问题编写了一些代码... 代码如下,它会继续向左下走以回答是,向右下走以回答否,并在到达外部节点时返回该节点。
使用Java编写。
当计算大O时,我认为最好在注释中对代码步骤进行编号,如上所示......我从这里的例子中学习:Big O, how do you calculate/approximate it? 因此,上面的1-9应该等于类似于这样的东西,其中
因此,现在我应该有(删除
对于时间复杂度:
使用Java编写。
public static int price(BinaryTree<Integer> t, boolean[] p) {
Position<Integer> root = t.root(); //1
while (t.isInternal(root)) { //2
int element = root.element(); // 3
if (!p[element]) { //4
root = t.getRight(root);//5
}
if (p[element]) { //6
root = t.getLeft(root); //7
}
}
int price = root.element(); //8
return price; //9
}
当计算大O时,我认为最好在注释中对代码步骤进行编号,如上所示......我从这里的例子中学习:Big O, how do you calculate/approximate it? 因此,上面的1-9应该等于类似于这样的东西,其中
C
是常数,???
是我的循环(其中N是给定数据结构的输入数量)
C + ??? + C + ??? + C + ??? + C + C + C
我的while
循环是C*N
或(O(N))
,但现在先用C*N
。我的两个if
语句应该是(对于时间复杂度O(1)
用于索引......和O(N)
用于空间复杂度,我现在将坚持时间复杂度)因此,现在我应该有(删除
C
元素,因为它们是常数,不重要)对于时间复杂度:
C*N + C + C
和
C*N + C*N + C*N
的空间复杂度
意味着我的时间复杂度为 C*N
或 O(N)
,空间复杂度为 O(3N)
,可以视为 O(N)
...
所以我的问题是,我做得对吗?如果不对,哪里出了问题?
谢谢
编辑:
树向左移动是给出真(是)答案,向右移动是给出否定答案。内部节点从0到m-1编号,其中m个内部节点在树中。因此,如果在根节点处给出否定答案,即内部节点0,则会向右移动,这个内部节点可能是节点3,因此布尔答案在p[3]而不是p[1],因为p[1]是节点1的答案,即问题1的答案。对此造成的混淆表示抱歉。
answers
是什么?这棵树是否平衡? - amit