【发布时间】:2019-05-05 19:08:43
【问题描述】:
我在替罪羊树中插入了 30000 个随机数。我有一个计数器来跟踪我的插入和搜索所做的比较。我试图搜索数字 3337,但没有找到,但跟踪器表示需要进行近 600 万次比较才能做出这个假设,这与 O(logn) 复杂度相差甚远。 这是我的搜索功能
/* Functions to search for an element */
bool search(int val)
{
return search(root, val);
}
/* Function to search for an element recursively */
bool search(SGTNode *r, int val)
{
bool found = false;
while ((r != NULL) && !found)
{
cnt++;
cnt++;
int rval = r->value;
if (val < rval){
cnt++;
r = r->left;
}
else if (val > rval){
cnt++;
cnt++;
r = r->right;
}
else
{
cnt++;
cnt++;
found = true;
break;
}
found = search(r, val);
}
cnt++;
cnt++;
return found;
}
我 100% 确定在调用 search 之前 cnt 计数器为 0。如果您需要更多我的代码,请随时询问。
【问题讨论】:
-
while循环的目的是什么?看起来您正在混合使用递归和迭代方法。 -
我把它改成了一个 if 并且确实我的计数急剧下降
-
给你写了一个答案。
标签: c++ data-structures tree