Сбой рекурсивной функции в C ++

0

После попытки вызвать простую программу для проверки моего метода поиска первого меньшего узла, чем тот, который указан как параметр:

BinaryTreeMap <int, int> m;
m[5] = 5;
m[3] = 3;
m[8] = 8;
m[1] = 1;
m[2] = 2;
m[6] = 6;
cout << m.firstSmaller(5) << " ";
cout<< m.firstSmaller(6);
cout << " " << m.firstSmaller(3) << " ";
cout << m.firstSmaller(12);

... моя программа просто рушится, никаких ошибок, ничего. Я нажимаю Я делаю какой-то бесконечный цикл, не выходя из рекурсивной функции правильно. Но я не знаю, где, так как, когда я пытаюсь использовать мой метод на листе бумаги, я получаю правильный результат.

Вот способ:

template <typename TipKey,typename TipValue>
TypeValue BinaryTreeMap<TipKey,TipValue>::firstSmaller(TypeKey key)
{
BSNode *pom = functionforFirstSmaller(root, key);
if(pom == 0) throw "There is no key smaller than the given one!";
return pom->value;
}

И функция forFirstSmaller:

BSNode* functionforFirstSmaller(BSNode *c, TypeKey k)
{
    if(c->left == 0 && c->right == 0) return c;
    if(c == 0) return 0;
    if(c->key >= k) return functionforFirstSmaller(c->left, k);
    BSNode *cvor = functionforFirstSmaller(c->right, k);
    //if(cvor == 0) return 0;
    return cvor;
}

Я не понимаю, почему он рушится. Если бы вы, ребята, могли помочь мне понять, я был бы очень признателен, потому что это помогло бы мне в дальнейшем программировать. Извините, если это не очень хорошо объяснили, привыкнув к английскому словарю в C++ (не мой родной язык).

  • 0
    Что такое root в firstSmaller ()?
  • 0
    Корень - это корень всего двоичного дерева. Если ключ, который я ищу, меньше его, он должен находиться в левом поддереве.
Показать ещё 3 комментария
Теги:
pointers
recursion
binary-tree

1 ответ

0

Кажется, что вы перевернули две строки кода. пытаться:

BSNode* functionforFirstSmaller(BSNode *c, TypeKey k)
{
    if (c == 0) return 0;
    if (c->left == 0 && c->right == 0) return c;
    if (c->key >= k) return functionforFirstSmaller(c->left, k);
    BSNode *cvor = functionforFirstSmaller(c->right, k);
    return cvor;
}
  • 0
    Все еще сбой, но спасибо за ответ. Я считаю, что я делаю некоторые ошибки, пытаясь получить нулевые указатели. Это должно быть это. Постараюсь исправить это сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню