Я все еще новичок в BST и пытаюсь написать метод рекурсивной вставки узла, используя частный метод, вызывающий метод publi c. Я пытался отладить, в чем может быть моя проблема, но для всех значений, которые я пытался вставить, вместо этого я получаю бесконечную последовательность предупреждающих сообщений, в которых говорится, что я не могу вставить дубликаты. Что я делаю не так?
Функция вставки:
template <class T>
void Bst<T>::insertNode(nodeType<T>* &p, const T& insertItem)
{
if(p == nullptr)
{
nodeType<T> *newNode;
newNode = new nodeType<T>;
newNode->info = insertItem;
newNode->lLink = nullptr;
newNode->rLink = nullptr;
p = newNode;
}
else
{
if(p->info == insertItem)
{
cout << "Insert failed: No duplicates allowed." << endl;
}
else if(p->info > insertItem)
{
return insertNode(p->lLink, insertItem);
}
else
return insertNode(p->rLink, insertItem);
}
}
Publi c метод:
template <class T>
void Bst<T>::insertNodeRecursive(const T& insertItem)
{
insertNode(root, insertItem);
}
Основной метод, в котором я его использую:
void readTree(Vector<WindLogType> &windlog){
Bst<Date> dateTree;
for(int x = 1; x < windlog.vecsize(); x++)
{
dateTree.insertNodeRecursive(windlog[x].d);
}
dateTree.inOrderTraversal();
}
operator==
перегрузка для сравнения значений дат:
bool operator==(const Date& firstDate, const Date& secondDate)
{
if(firstDate.GetYear() == secondDate.GetYear() && firstDate.GetMonth() == secondDate.GetMonth() && firstDate.GetDay() == secondDate.GetDay())
{
return true;
}
else
{
return false;
}
}
Если требуется больше кода, дайте мне знать, также мой конструктор по умолчанию устанавливает для моего узла dateTree root значение nullptr.