Поиск строки в BST (c) - PullRequest
0 голосов
/ 11 июля 2020

У меня уже есть дерево двоичного поиска, и каждый узел содержит имя человека. Я хотел бы сделать al oop в основном, что позволяет мне искать, находится ли введенное мной имя в BST. Я написал эту функцию:

int find(Node* root, char* search) {

  if (root != NULL) {

    
        if(strcmp((root->name), search) == 0)
      return 1;

   
    if (strcmp(root->name, search) < 0)
      return find(root->left, search);

 
    else
      return find(root->right, search);

  }
  else
    return 0;
}

Мое намерение - вернуть 1, если найдено, вернуть 0 в противном случае. Моя основная функция имеет это l oop:

char choice[30];
while(1){
    printf("Enter a word to search: ");
    scanf("%s", choice);

    int result = find(root, choice);
    if(result == 1){
        printf("Found.");
    }
    else{
        printf("Not found.");
    }

    printf("\n");
}

По какой-то причине он работает (печатает «Найдено») только для первого имени в моем BST (root). Любая помощь будет оценена!

1 Ответ

1 голос
/ 11 июля 2020

Если strcmp(root->name, search) < 0, то это означает root -> name 'меньше', чем поиск, и вы должны смотреть вправо, а не влево.

Я думаю, вы только что поняли направление своего поиск назад к началу! Если вы выполняете рекурсию влево, вы должны возвращаться вправо и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...