C++ B-树递归搜索C++;

C++ B-树递归搜索C++;,c++,recursion,b-tree,C++,Recursion,B Tree,此函数递归调用自身来搜索Btree,如果找到值,则返回true;如果未找到值,则返回false。如果没有找到,我还希望它在最后一次“找不到”。它工作得很好,只是自从它调用自己以来,它无数次地说“找不到”(每次它下降到一个称为“找不到”的级别) bool lookup(int val, btnode *n) //returns true/false if value is in btree { if (n==NULL) return false; //empty tree for (int i

此函数递归调用自身来搜索Btree,如果找到值,则返回true;如果未找到值,则返回false。如果没有找到,我还希望它在最后一次“找不到”。它工作得很好,只是自从它调用自己以来,它无数次地说“找不到”(每次它下降到一个称为“找不到”的级别)

bool lookup(int val, btnode *n) //returns true/false if value is in btree
{

if (n==NULL) return false; //empty tree

for (int i=0;i< n->count;i++) //check in present node for the val
    if(n->value[i]==val)
    {
        flag = true;
        return true;
    }



//check in child node

    for(int i =0;i<n->count;i++) //check for child node
    {   if(val < n->value[i])
        {   cout<<"checking a different node."<<endl;
            lookup(val,n->child[i]);
        }
    }
    if(val > n->value[(n->count)-1])
    {
        cout<<"searching a right subtree"<<endl;
        lookup(val, n->child[n->count]);
    }
if (flag==false)
return false;
else return true;
}

bool lookup2(int val, btnode *n)
{
if(lookup(val, n)==false)
{
    cout<<"not found"<<endl;
    return false;
}
else
{
    cout<<"Found it"<<endl;
    return true;
    }
}
bool lookup(int val,btnode*n)//如果值在btree中,则返回true/false
{
if(n==NULL)返回false;//空树
for(int i=0;icount;i++)//为val签入当前节点
如果(n->value[i]==val)
{
flag=true;
返回true;
}
//签入子节点
for(int i=0;icount;i++)//检查子节点
{if(valvalue[i])
{coutcount)-1])
{

cout您可能希望创建一个辅助方法来调用此查找函数并进行打印。类似于:

bool lookup_print(int val, btnode *n) {
    bool found = lookup(val, n);
    if (found) {
        cout << "Found it!" << endl;
    } else {
        cout << "Not found..." << endl;
    }
    return found;
}
bool found = lookup(val,n->child[i]);
if (found) {
    return found;
}

有两个函数。一个用于实际打印,另一个用于递归工作。为什么不在调用方执行此操作,而不是尝试在此处的方法中执行此操作?还有一个
bool contains()
函数几乎没有比
location find()更有用的了
。我尝试了这个,不幸的是我得到了一个错误的“未找到”除非值在根节点中。也就是说,函数向下遍历到子节点,子节点返回true,但顶部函数将返回false。基本上,如果它返回true,我希望完成,打破递归循环,返回true。否则返回false。好的,我接受了您的建议,添加了一个名为lookup2的辅助函数。我必须改变的是,设置一个静态标志,当它被找到时,该标志将切换为true。@Xymostech的答案对于您所抱怨的主要问题是正确的。第二个问题是您没有正确执行搜索。您也需要解决这一问题。第二个问题是您没有返回递归的
查找
result.并且,在
lookup
函数的末尾,将
if(flag==false).
替换为
return false;
,因为如果执行达到该点,则表示没有找到任何内容。