我有一个工作搜索功能,它将搜索数据库中的确切值,但我的目标是搜索存储数据的数据库中的子串以及搜索子串时(使用了cout<< “检查通过”)我可以看到通过树的搜索缩短,一些子串被发现,其他更深入的不?为什么呢?
bool contains(const Comparable & key, BinaryNode *leaf)
{
//cout << "containsing... for: " << key << endl;
if(leaf != NULL)
{
//std::string Data = leaf->element;
//cout << "check passed for contains!" << endl;
if(leaf->element.find(key) != std::string::npos)
{
//std::cout << "Found->" << key << "!" << endl;
return true;
}
else if(key >= leaf->element)
{
// cout << "key->" << key << "is less than leaf->" <<leaf->element << endl;
if(leaf->left != NULL)
return contains(key, leaf->left);
else
return false;
}
else if(key < leaf->element)
{
//cout << "key->" << key << "is greater than leaf->" <<leaf->element << endl;
if(leaf->right != NULL)
return contains(key, leaf->right);
else
return false;
}
else
return false;
}
else
return false;
}
答案 0 :(得分:1)
试试这个......
bool contains(const Comparable & key, BinaryNode *leaf)
{
if(!leaf)
return false;
if(leaf->element.find(key) != std::string::npos)
return true;
int nResult = leaf->element.compare(key);
if(nResult == 0)
return true; // This condition will never be hit.
else
if(nResult < 0)
return contains(key, leaf->left)
else
if(nResult > 0)
return contains(key, leaf->right)
}
还尝试调试并查找键值是否小于/大于叶节点值,那么这意味着它对于子串也是相同的。如果没有,则必须搜索左侧和右侧子树。如果左子树返回false,则在右子树中搜索。代码如下......
bool contains(const Comparable & key, BinaryNode *leaf)
{
if(!leaf)
return false;
if(leaf->element.find(key) != std::string::npos)
return true;
if( !contains(key, leaf->left) )
return contains(key, leaf->right)
return true;
}