2 Неравные строки возвращаются с истинным значением на ==, а также a.compare (b)

Я делаю BST & Дерево AVL работает на строковых ключах.
В основном, я не добавил ключ «600», но при обнаружении он показывает «600».

Я попытался отладки с помощью GDB & обнаружил, что на 2 неравных строках == дал истинное значение, переданное моему условию if.

Я также пытался использовать функцию сравнения () строкового класса, но та же проблема.
Пожалуйста помоги !

Это мое findNode функция:

template<class NodeType>
NodeType* Tree<NodeType>::findNode(string key, NodeType* node)
{
if ( node == NULL )
return NULL;
else if ( node->Key() == key )
return node;
else if ( key < node->Key() )
findNode(key, node->Left());
else if ( key > node->Key() )
findNode(key, node->Right());
else
return NULL;
}

Вот ссылка на весь код
https://github.com/tshrjn/ADSA/blob/master/bst.cpp

-2

Решение

в вашем findNode метод, ты пропал return на рекурсивных вызовах findNode(...left...) а также findNode(...right...):

template<class NodeType>
NodeType* Tree<NodeType>::findNode(string key, NodeType* node)
{
if ( node == NULL )
return NULL;
else if ( node->Key() == key )
return node;
else if ( key < node->Key() )
return findNode(key, node->Left());
else if ( key > node->Key() )
return findNode(key, node->Right());
else
return NULL;
}

Ваша реализация вернула мусор в этих случаях (а это большинство случаев).


Если вы скомпилировали с -Wallфлаг, то компилятор будет иметь нашел эту ошибку для вас.

Кстати, есть еще несколько ошибок, обнаруженных этим флагом, вы можете проверить его.

3

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector