这个问题与二叉搜索树的深度有关,但我的问题是要理解下面显示的示例代码:
int sum(Node node) {
if (node == null){
return 0;
}
return sum (node.left) + node.value + sum(node.right);
}
作者说这个深度大致是log N,我不知道怎么得到log N.
另外,我对这段代码的理解,似乎是无限的。我知道不是,但我不能说服自己。例如,如果这是1~3个数组,则节点从@ 2开始,所以:
LVL 1:sum(1)+ 2 + sum(3)
LVL 2:总和(sum(0)+ 1 + sum(2))+ 2 + sum(sum(2)+ 3 + sum(0))
LVL 3:...(总和(2)将重复LVL 1,它永远不会结束)
任何人都可以帮我指出这个问题吗?
谢谢!
答案 0 :(得分:0)
决定将我的评论转为答案:
二进制树是log n,因为每次都会将它切成两半,但这是一棵平衡的树。例如,如果一切都在右边,那么非常不平衡的就是O(N)。
那么,为什么它不是无限的?
由于这是递归的,它需要一种方法来停止调用自身,也就是说当节点为空时,它就会失效。
因此,在每棵树中,您最终都会到达未设置的子节点,这些将停止递归,从而阻止它无限。
如果你删除那个if语句,那么你会得到一个异常,但是在递归算法中实际上做了一些不会结束的事情,你会得到一个堆栈溢出。