【发布时间】:2020-12-09 02:58:16
【问题描述】:
所以我遇到了这个问题,我应该在树中找到元素的级别。似乎什么都没有解决,所以我在这里寻求帮助。
这是我到目前为止所得到的。这里的问题是第 4 个断言(返回的级别应该是 2)不起作用并且断言被警告。我曾想过也许尝试不递归地执行此操作,但怎么能这样做呢?
int findElementLevel(const BSTree tree, const int element) {
int level = 0;
if (tree == NULL) {
return -1;
}
if (tree->data == element) {
return level;
}
if (element < (tree)->data) {
level++;
findElementLevel(tree->left, element);
return level;
}
if (element > (tree)->data) {
level++;
findElementLevel(tree->right, element);
return level;
}
}
void testNewTree(void) {
BSTree tree = emptyTree();
assert(isEmpty(tree));
int arr[5] = {3,2,5,1,4}, i;
for (i = 0; i < 5; i++)
{
insertSorted(&tree, arr[i]);
}
assert(findElementLevel(tree, 3) == 0);
assert(findElementLevel(tree, 2) == 1);
assert(findElementLevel(tree, 5) == 1);
assert(findElementLevel(tree, 1) == 2);
assert(findElementLevel(tree, 4) == 2);
}
【问题讨论】:
-
level是一个局部变量。顶级函数返回时,它始终为 0 或 1。 -
您在每次递归中重置局部变量
level。也许它应该是staticint level = 0;然后你还需要在返回时递减(这样下次就可以了)。 -
级别应该从 0 开始,但在函数返回时不会重置。但我不知道如何解决它。级别不允许是静态变量或全局变量
-
为什么不允许?
-
可以是函数的参数。
标签: c recursion tree binary-search-tree function-definition