为什么这个递归函数的行为不同于预期
Why does this recursive function behave different than intended?
我正在写一棵二叉树,我被困在一个搜索函数上,它需要一个值x,并确定它是否是树中的叶子。
我有:
bool search(Node<T>* ¤tNode, const T& x) const
{
/* Base Case */
if ( currentNode != nullptr && (leaf(currentNode) == true) && currentNode->data == x )
{
return true;
}
/* Recursive Case */
else {
if (currentNode != nullptr)
{
search(currentNode->left, x);
search(currentNode->right, x);
}
//If first if condition is not met for all values then value must not exist
return false;
}
bool leaf(Node<T>* currentNode) const
{
if (currentNode != nullptr)
{
return ((currentNode->left == nullptr && currentNode->right == nullptr) ? true : false);
}
else
{
return true;
}
}
代码总是返回false,为什么第一个IF语句从未被触发?
编辑:代码调用搜索:
for (int i = 0; i < 101; i++)
if ((t.search(i) == true) ? cout << "LEAF FOUND: " << i << endl : cout << " NOT A LEAF: " << i << endl);
处理递归可能很棘手:d
除非根节点是叶节点,否则代码将始终返回return false
您的代码向进行调用的函数返回true,而不是一直返回到原始调用者(递归之前)
假设您的树有三个元素,并且项目位于左叶所以在根节点中,你用左节点调用你自己所以它返回true给调用者(根节点),根节点对此不做任何处理,只是继续执行。
这个问题可以简单地解决,只需添加一个if语句来检查调用
的函数的返回值。if (currentNode != nullptr)
{
if(search(currentNode->left, x)) return true;
if(search(currentNode->right, x)) return true;
}
return false;
因为您没有从搜索方法返回布尔值:
if (currentNode != nullptr)
{
search(currentNode->left, x);
search(currentNode->right, x);
}
总是返回false
相关文章:
- 为什么编译器将其解析为函数指针而不是递归调用?
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 不理解此递归函数中的返回 (C++)
- 基类 C++14 模板函数在 Mac OS 上的 clang 中不可见(递归模板)
- C++ 调试递归函数,它不会立即退出函数
- 我如何实现递归函数的模板,该模板允许C 中的许多不确定数据类型的参数
- 具有递归函数且不带全局变量的程序 - C++
- 请向我解释为什么这个函数不是递归的
- 递归计算在不使用静态局部变量,全局变量或静态函数的情况下,在递归函数中发生的环数
- 霍夫曼解码中的递归函数不退出
- 如何在不使用静态变量的情况下从递归函数中只调用另一个函数一次
- 递归函数是否可以在不将常量作为参数发送的情况下了解首次调用它的函数中的常量
- C++BST-不使用递归调用display()函数
- 我用 c++ 编写的递归函数不起作用
- 在递归函数中创建 std::list of value 而不是 std::list of 指针
- 递归函数不附加数字
- 递归函数不返回指定的值
- 这个递归函数不可能是迭代的吗?
- 递归函数-输出不正确
- 为什么这个递归函数的行为不同于预期