【发布时间】:2018-10-29 08:29:01
【问题描述】:
我在计算为我的任务编写的函数的时间复杂度时遇到了一些麻烦。
这个函数是递归的,它计算二叉搜索树中有多少个值大于 10 的叶子。这是函数:
int count_leaf(node* root)
{
static int count = 0;
int call;
if (root == NULL)
{
return 0;
}
call = count_leaf(root->left);
if (root->left == NULL && root->right == NULL && root->data > 10)
{
count++;
}
call = count_leaf(root->right);
return count;
}
计算这个函数的时间复杂度的最正确和正确的方法是什么?
【问题讨论】:
-
所以它正在遍历所有节点,对吧?有多少个节点?
-
嗯,树中有多少节点有关系吗?据我所知,计算时间复杂度是无用的信息,但是好吧,假设是 33。
-
假设您知道处理特定树需要多长时间。如果您再向该树添加一个节点,您预计需要多长时间?
-
如果您尝试多次调用您的函数,您的实现将被破坏。
-
在具体的任务中 a 不需要多次调用它。但是如果是的话,我可以把这个计数器定义为一个全局变量,并且每次在函数调用之前将它初始化为零