C++ B-树递归搜索C++;
此函数递归调用自身来搜索Btree,如果找到值,则返回true;如果未找到值,则返回false。如果没有找到,我还希望它在最后一次“找不到”。它工作得很好,只是自从它调用自己以来,它无数次地说“找不到”(每次它下降到一个称为“找不到”的级别)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
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;
,因为如果执行达到该点,则表示没有找到任何内容。