Рекурсивная функция, продолжающаяся после возврата - PullRequest
0 голосов
/ 06 мая 2020

EDIT: проблема, указанная ниже, была решена. Но у меня был дополнительный вопрос. Иногда мой профессор не возвращается при рекурсивном звонке. Как мне узнать, когда мне следует вернуть рекурсивный вызов, а когда я должен просто вызвать функцию рекурсивно?

Я пишу рекурсивную функцию, чтобы увидеть, содержит ли двоичное дерево поиска определенный ключ. Фраза «Key Match Contains» печатается, значит, ключ найден, но функция по-прежнему возвращает false. Я заметил, что он возвращает false при поиске левых поддеревьев. Есть идеи, что происходит не так? Заранее благодарим.

Внутренний метод:

template <typename K>
bool Multiset<K>::Contains(std::unique_ptr<Node> &n, const K &key) {
  if (!n) {
    std::cout << "Contains returns null" << std::endl;
    return false;
  }

  if (n->key == key) {
    std::cout << "Key match Contains" << std::endl;
    return true;
  } else if (key < n->key) {
    Contains(n->left, key);
  }
  return Contains(n->right, key);
}

Внешний метод:

template <typename K>
bool Multiset<K>::Contains(const K &key) {
  return Contains(root, key);
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Нужно ставить return Contains(n->left, key); не просто Contains(n->left, key);

0 голосов
/ 06 мая 2020

Вы отбрасываете результат поиска в части:

    Contains(n->left, key);

Это должно быть, например, так:

    if (Contains(n->left, key)) return true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...