Эта функция рекурсивно вызывает себя для поиска Btree и возвращает true, если значение найдено, и false, если оно не найдено. Я также хочу, чтобы он «не нашел» один раз в конце, если он не найден. Он отлично работает, за исключением того, что он говорит «не найден» много раз (каждый раз, когда он опускается ниже уровня, который он говорит, не найден), так как он называет себя.B-tree рекурсивный поиск C++
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;
}
}
Имеют две функции. Тот, который делает фактическую печать, и тот, который у вас есть прямо сейчас, что делает работу рекурсивно. – zz3599
Почему бы просто не сделать это у вызывающего, а не пытаться сделать это в методе здесь? – Tawnos
Также функция 'bool contains()' почти никогда не бывает более полезной, чем 'location find()'. –