Итак, у меня есть дерево двоичного поиска, которое отлично работает, за исключением того факта, что я не хочу вставлять дубликаты. Я пробовал подумать над несколькими способами сделать это, но, похоже, не понял этого.Избегайте вставки дубликатов в двоичном дереве поиска
То, что я пытаюсь сделать, это сначала вызвать мой метод поиска, прежде чем вставлять что-либо, чтобы проверить, а если нет, то вставьте метод вставки курсора.
Кто-нибудь знает хороший способ приблизиться к этому? Правильно ли моя логика?
Вот мой метод вставки:
bool BinarySearchTree::treeInsert(string courseNumber, string courseTitle)
{
Course * z = new Course(courseNumber, courseTitle);
Course *x, *y;
y = NULL;
x = root;
while (x != NULL){
y = x;
if(z->getCourseNumber() < y->getCourseNumber()){
x = x->getLeft();
} else{
x = x->getRight();
}
}
z->setParent(y);
if (y == NULL){
root = z;
} else if (z->getCourseNumber() < y->getCourseNumber()){
y->setLeft(z);
}
else {
y->setRight(z);
}
}
Заранее спасибо
Одна из проблем заключается в том, что tou выделяет новый «курс», прежде чем вы узнаете, что он когда-либо понадобится. Если найден дубликат, у вас есть утечка памяти. – PaulMcKenzie
Свободная подсказка: что происходит "if (z-> getCourseNumber() == y-> getCourseNumber())"? –