我有一个实现二进制搜索树的类,我的私有方法之一是方法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;
}
答案 0 :(得分: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
,然后从那里开始。