java - 为什么平衡 BST 中节点值之和的时间复杂度为 O(n)?
问题描述
我正在尝试学习 Big O 表示法,但遇到了一个问题。在这段代码中,我们试图找到节点值的总和。由于有 2 次调用 sum 函数,因此每次调用的调用次数将是以前的两倍。那么为什么运行时间是 O(n) 而不是 O(2^n)。
int sum(Node node) {
if(node==null)
return 0;
return sum(node.left) + node.value + sum(node.right);
}
解决方案
在查看这些时,您的推理是部分正确的,这确实是指数级的 - 但在h
- 而不是在n
(树h
的高度在哪里) - 因为每次迭代调用,你都有h-1
更多的节点要走,O(2^h)
最后产生。
但是,在这里,n
是树中的节点数。这在 中运行O(n)
,因为每个节点都只遍历一次 - 并且其中有n
一个,总共为O(n)
.
推荐阅读
- ios - UIPopoverView 跟随 uitextfield 光标
- javascript - 如何让 webpack 在每次更改时重建 server.js 并让 nodemon 重新启动服务器?
- javascript - 从base64节点js转换后.txt文件开头出现一些随机字符
- unity3d - Unity Shader Graph - 跟随对象形状的Grandient
- routes - TYPO3 felogin - 如何通过 Hook 将 preserveGETvars 或 redirect_url 设置为实际页面?
- x509 - 单个 PKI 可以与多个证书策略相关联吗?
- flutter - 颤振中的提供者层次结构
- python - Python:将一个numpy数组写入txt文件
- java - 如何使用 bufferedreader 和 treeset 从文本中显示不同单词的数量?
- javascript - 从另一个页面使用 AJAX 来操作数据库