Я делаю 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
в вашем 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
флаг, то компилятор будет иметь нашел эту ошибку для вас.
Кстати, есть еще несколько ошибок, обнаруженных этим флагом, вы можете проверить его.