此函数以递归方式调用自身来搜索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;
}
}
答案 0 :(得分:2)
您可能想要创建一个调用此查找函数的辅助方法,并进行打印。类似的东西:
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;
}