递归搜索不起作用

时间:2014-03-29 03:57:20

标签: c++ recursion

我一直在用C ++构建二叉树。我尝试通过递归方法添加搜索元素功能。

它无法正常工作。

请参阅以下代码和指南。

bool Binarytree::SearchElement(node* SearchPtr,int key,bool found) {
    if(SearchPtr->data==key)
        found=true;

    if(SearchPtr==NULL  || found==true)
        return found;


    else
    {
        if(SearchPtr->data>key)
        { cout<<endl<<"Seaching in Left Sub tree"<<endl;
            SearchElement(SearchPtr->left,key,found);
        }
        else
        {   cout<<endl<<"Seaching in right Sub tree"<<endl;
            SearchElement(SearchPtr->right,key,found);
        }

    }

}

函数SearchElement的调用如下:(注意值1不存在于树中)

if(SearchElement(root,1,false))
        cout<<endl<<"Element Found"<<endl;
    else
        cout<<endl<<"Element not Found"<<endl;

1 个答案:

答案 0 :(得分:0)

你没有归还任何东西。找到NULL后,您需要返回false。如果您找到了需要返回{@ 1}}的元素。一旦您知道元素是否存在,您需要返回所有递归调用。请检查以下代码。

注意:您已经提到了二叉树,并像二叉搜索树一样进行了搜索。考虑到它是一个二叉搜索树,它将是这样的:

true

如果是二叉树,则必须遍历整个树以查找元素是否存在。像这样:

bool Binarytree::SearchElement(node* SearchPtr,int key) {
    if(SearchPtr->data==key)
        return true;

    if(SearchPtr==NULL)
        return false;


    if(SearchPtr->data < key) //not greater than, but less than
    { cout<<endl<<"Seaching in Left Sub tree"<<endl;
        return SearchElement(SearchPtr->left,key);
    }
    else
    {   cout<<endl<<"Seaching in right Sub tree"<<endl;
        return SearchElement(SearchPtr->right,key);
    }

}