我的搜索功能,我已经实现了一些工作。当我搜索不存在的值时,搜索功能将查找并返回false。当我搜索一个作为根的值时它工作正常并返回true。问题是当我搜索除树中的根以外的值但它返回false时。关于我做错什么的任何想法?
template <class Comparable>
bool BinarySearchTree<Comparable>::findValue(const Comparable& value){
if(root->element == value){
return true;
}
if(value > root->element)
{
if(root->right != NULL)
{
root->right->findValue(value);
}
else
{
return false;
}
}
if(value < root->element)
{
if(root->left != NULL)
{
root->left->findValue(value);
}
else
{
return false;
}
这些是我的私人数据成员,不能以任何方式改变。
private:
struct BinaryNode
{
Comparable element;
BinarySearchTree<Comparable> *left;
BinarySearchTree<Comparable> *right;
};
BinaryNode *root;
};
答案 0 :(得分:1)
当您从右侧节点return false
时,您甚至都不会尝试左侧节点。
尝试返回true;
if(value > root->element)
{
if(root->right != NULL)
{
if(root->left->findValue(value))
{
return true;
}
}
}
if(value < root->element)
{
if(root->left != NULL)
{
if(root->left->findValue(value)
{
return true;
}
}
}
return false
答案 1 :(得分:1)
您应该返回root->left->findValue(value);
和root->right->findValue(value)
目前,您正在为这些节点调用findValue函数,但不存储该值或将其返回到任何位置,从而导致结果丢失。