Цель этой функции заключалась в том, чтобы искать узел и возвращать 0, если не найден, и 1, если найден.Из некоторого тестирования, похоже, что даже если он найден, он все равно возвращает 0 каждый раз, если узел не является корневым.Может кто-нибудь объяснить, почему мой код неправильный?
В основном я устанавливаю переменную = search, а если переменная = 1, печатать присутствует, а если переменная = 0, печатать отсутствует.
Что я проверялс bst 3 и 4. Я протестировал bst и знаю, что он настроен правильно
, если я ищу 3, счетчик возвращает 1 и присутствуют основные отпечатки.если я ищу 4, то, что я думаю, происходит, когда он все еще переходит к оператору if (root-> data == value), устанавливает счетчик в 1 и возвращает его.Однако вместо того, чтобы вернуться к основному, он затем идет к счетчику возврата внизу (который равен 0) и возвращает это к главному, что приводит к отсутствию печати, даже если он там есть.Может ли кто-нибудь шаг за шагом рассказать мне, что происходит в этом коде и почему, и как я могу заставить его вернуть 1 обратно в main?
int search(struct Node* root, int value){
int counter = 0;
if (root->data == value){
counter = 1;
return counter;
} if (root == NULL){
return counter;
}
if (value < root-> data){
search(root->left, value);
}
else if (value > root->data){
search(root->right, value);
}
return counter;
}
РЕДАКТИРОВАТЬ: я также пытался превратить его в функцию void ивместо возврата он печатает «присутствует», если узел найден.Есть ли способ сделать так, чтобы он печатался только один раз, используя этот способ?