c++ - 二叉搜索树,仅打印出用于递归插入的“重复”警报 - 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。
解决方案
推荐阅读
- php - 如何从 html 按钮启动条码扫描器
- android - 导入 .sfb 文件未在 android 的资产查看器窗口中打开
- python - 如何在两对坐标之间生成自定义的可能组合?
- javascript - 需要在我的网站中嵌入另一个网站
- android - Android MVP,获取剪贴板数据时同样的旧上下文问题?
- angular - 错误:未捕获的 ReferenceError:未定义进程
- oracle-apps - oracle brm中的服务如何触发事件
- node.js - 从 Nodejs 连接到 UDP 服务器
- image-comparison - 没有为所有带有 HTML REPORTER (wdio5) 的套件生成主报告
- php - 合并mysql中的列条目