【问题标题】:Recursive boolean function for a binary search tree二叉搜索树的递归布尔函数
【发布时间】:2019-04-24 06:52:57
【问题描述】:

我有一个实现二叉搜索树的类,我的私有方法之一是方法bool find(Node<Key, Info> * &node, Key _key);,其中node 代表指向节点的指针,我们开始搜索,_key 代表每个节点的唯一值钥匙。 我的方法实现如下:

template<typename Key, typename Info>
bool BST<Key, Info>::find(Node<Key, Info>* &node, Key _key)
{
    if (node)
    {
        if (node->key == _key)
        {
            return true;
        }
        else
        {
            find(node->left, _key);
            find(node->right, _key);
            return false;
        }
    }
    else return false;
}

并且它不会返回 true,即使具有给定键的元素存在。我在 return 语句之前添加了一个打印命令,它执行了,所以我的函数似乎找到了给定的节点,但我想我的理解是错误的,它仍然以某种方式返回 false。


已解决

我的问题似乎找到了解决办法:)

template<typename Key, typename Info>
bool BST<Key, Info>::find(Node<Key, Info>* &node, Key _key)
{
    if (node)
    {
        if (node->key == _key)
        {
            return true;
        }
        else if(_key<node->key)
            return find(node->left, _key);
        else 
            return find(node->right, _key);
    }
    else return false;
}

【问题讨论】:

  • 为什么在你的else 分支中忽略find 的结果?尝试在一些简单的示例中逻辑地遵循您的代码。
  • 请将您的解决方案转移到自己的答案中,谢谢。

标签: c++ recursion tree binary-search-tree


【解决方案1】:

对于二叉搜索树,您当然希望沿着树向下走,直到找到值或到达 nullptr。我将在这里快速写出一个搜索功能:

bool search(Node * node, int value){
    if(node == nullptr) //If it's nullptr, we've reached the end without finding value.
        return false;
    if(node->value == value) //If it's value, we've found it!
        return true;
    if(node->value > value) //If value is less than node's value, go to left.
        return search(node->left, value);
    if(node->value < value) //If value is greater than node's value, go to right.
        return search(node->right, value);
}

这是对有组织的树的递归搜索(为简单起见,不使用模板)。因此,在二叉搜索树中,首先需要检查节点是否为nullptr,然后是否为value,然后从那里去。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2019-05-03
    • 2021-07-03
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多