二叉搜索树:搜索功能问题

时间:2014-02-19 23:06:26

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

我的搜索功能,我已经实现了一些工作。当我搜索不存在的值时,搜索功能将查找并返回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;
};

2 个答案:

答案 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函数,但不存储该值或将其返回到任何位置,从而导致结果丢失。