首页 > 解决方案 > 二叉搜索树,仅打印出用于递归插入的“重复”警报 - C++

问题描述

我对 BST 还是很陌生,我正在尝试编写一个递归插入节点方法,使用一个调用公共方法的私有方法。我一直在尝试调试我的问题可能是什么,但是对于我尝试插入的所有值,我得到一个无限序列的警报消息,而不是说我不能插入重复项。我究竟做错了什么?

插入功能:

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

}

公共方法:

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”根节点设置为 nullptr。

标签: c++recursioninsertbinary-tree

解决方案


推荐阅读