繁体   English   中英

避免在二进制搜索树中插入重复项

[英]Avoid inserting duplicates in binary search tree

所以我有一个二叉搜索树,除了我不想插入重复的事实之外,它都能完美地工作。 我尝试过思考几种方法来完成此操作,但似乎无法弄清楚。

我想做的是先插入搜索方法,然后再插入要检查的内容,如果没有,请使用insert方法插入课程。

有谁知道解决这个问题的好方法? 我的逻辑正确吗?

这是我的插入方法:

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);
    }
}

提前致谢

在循环末尾的插入方法中,当您尝试插入重复项时, y的课程编号将等于z的课程编号。 在这种情况下,请勿执行任何操作(除了删除z因为您当前已分配z ,即使您不需要它)。

我建议在循环中检查是否相等,而不要遵循>=的链,如果没有插入发生,则返回false。 仅当确定将使用新元素时,才创建它:

 bool BinarySearchTree::treeInsert(string courseNumber, string courseTitle)
 {
     Course *x=root, *y=nullptr;

     while (x != NULL) {
         y = x;
         if(courseNumber < y->getCourseNumber())
             x = x->getLeft();
         else if(courseNumber==y->getCourseNumber()) 
             return false;
         else x = x->getRight();
     }
     Course * z = new Course(courseNumber, courseTitle);
     z->setParent(y);
     if (y == NULL)
         root = z;
     else if (z->getCourseNumber() < y->getCourseNumber())
            y->setLeft(z);
     else   y->setRight(z);
     return true; 
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM