递归bool函数的问题

时间:2018-04-15 17:28:42

标签: c++ recursion tree binary boolean

bool search(double x, TreeNode *t)
{
    if (t->value == x)
        return true;
    else if (x < t->value)
        search(x, t->left);
    else if (x > t->value)
        search(x, t->right);
    return false;

bool search(double num)
{
    TreeNode *ptr = root;
    return search(num, ptr);
}

具有2个参数的搜索函数是二叉树类的私有成员函数,它使用递归来搜索值。调用另一个搜索函数来调用递归函数。此代码不起作用。我已经显示了递归函数的值,它没有返回0或1.我不知道为什么。此外,如果我发送的值不在树中,程序会崩溃,所以我没有任何错误可以帮助我。

1 个答案:

答案 0 :(得分:1)

如果找不到元素,您的递归永远不会停止 如果在根目录中找到它,则返回true 如果在其他地方找到它,则返回false

你需要

  1. 处理空树,
  2. 递归时返回有意义的内容。
  3. bool search(double x, const TreeNode *t)
    {
        if (t == nullptr)
            return false;
        else if (t->value == x)
            return true;
        else if (x < t->value)
            return search(x, t->left);
        else
            return search(x, t->right);
    }
    

    bool search(double x, const TreeNode *t)
    {
        return t != nullptr
              && (  t->value == x
                || (t->value < x && search(x, t->left))
                || (t->value > x && search(x, t->right)));
    }