繁体   English   中英

二进制搜索树的递归布尔函数

[英]Recursive boolean function for a binary search tree

我有一个实现二进制搜索树的类,我的私有方法之一是方法bool find(Node<Key, Info> * &node, Key _key); ,其中node代表指向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;
}

对于二叉搜索树,您当然要在树上走下来,直到找到该值或到达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);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM