У меня возникают проблемы с логикой этого. Как выполнить поиск по всему дереву (поскольку я не могу полагаться на какой-либо поиск заказа) и возвращать только одно подходящее значение (если оно существует)? Если я верну рекурсивный вызов, не будет ли он провалиться, если он попадет на первый лист и не нашел совпадения?рекурсивно поиск bst для неключевого значения
При использовании функции ниже вызовы выполняются до тех пор, пока не будет найдено совпадение или не будет достигнут конец дерева, а самый левый узел будет возвращен независимо от совпадений.
Моя рекурсивная функция, проходя по-порядку:
tnode *find(tnode *ptr, const char *str)
{
if (ptr == NULL) return ;
if(strcmp (str,ptr->str) == 0)
return ptr;
else
{
//search left subtree
if (ptr->left != NULL)
find(ptr->left, str) ;
// search right subtree
if (ptr->right != NULL)
find(ptr->right, str) ;
}
return;
}
Это сделало это. Спасибо. – rcj