C++ 重载运算符++;查找并返回二叉搜索树的后续节点
这是我代码的相关部分,涉及重载运算符+,以查找并返回二元搜索树的后续节点。我已经测试了树本身,它的形式正确,并且不能正确地使用顺序遍历函数 但是我一辈子都搞不清楚重载操作符++有什么不对。我尝试了许多不同的版本,最新的一个版本是NextInOrderSuccession,当从重载操作符中调用/not/时,它会完美地返回继任者++ 这一点,再加上我制作了多个版本的operator++,让我相信我只是错误地处理了实际的重载操作符。有人能提供一些见解吗 WCBst是我的树类。正在递增的curr是一个节点。这就是我返回一个节点的原因C++ 重载运算符++;查找并返回二叉搜索树的后续节点,c++,operator-overloading,binary-search-tree,C++,Operator Overloading,Binary Search Tree,这是我代码的相关部分,涉及重载运算符+,以查找并返回二元搜索树的后续节点。我已经测试了树本身,它的形式正确,并且不能正确地使用顺序遍历函数 但是我一辈子都搞不清楚重载操作符++有什么不对。我尝试了许多不同的版本,最新的一个版本是NextInOrderSuccession,当从重载操作符中调用/not/时,它会完美地返回继任者++ 这一点,再加上我制作了多个版本的operator++,让我相信我只是错误地处理了实际的重载操作符。有人能提供一些见解吗 WCBst是我的树类。正在递增的curr是一个节
void WCBst::write_to_file()
{
// ofstream outFile;
outFile.open("WCBst.txt");
curr = minValue(root);
for (int i = 0; i < count;i++)
{
cout << '{' << curr->data.first << ',' << curr->data.second << "}\n";
outFile << '{' << curr->data.first << ',' << curr->data.second << "}\n";
++curr;
}
node *WCBst::operator++()
{
return nextInorderSuccessor(root, curr);
}
node* WCBst::nextInorderSuccessor(node* root, node* tofind) {
node* successor = NULL;
if (tofind->right) {
successor = tofind->right;
while (successor->left) {
successor = successor->left;
}
}
else {
while (root) {
if (tofind->data < root->data) {
successor = root;
root = root->left;
}
else if (tofind->data > root->data) {
root = root->right;
}
else {
break;
}
}
}
return successor;
}
void WCBst::将_写入_文件()
{
//出流孔的直径;
outFile.open(“WCBst.txt”);
curr=最小值(根);
for(int i=0;i左;
}
else if(tofind->data>root->data){
根=根->右;
}
否则{
打破
}
}
}
返还继承人;
}
什么是WCBst?那是你的树吗?为什么递增一棵树会返回一个节点*
?请添加一些说明。我是否应该在节点上不返回或递增?这就是我错的地方吗?如果是这样,我应该怎么做呢?operator++
应该返回相同的类型,如果您有WCBst::operator++
它应该返回WCBst&
。但我认为滥用运算符来做与原始含义完全不同的事情不是一个好主意。我还尝试了node*::operator++并获得了完全相同的结果。你应该增加节点,但你增加了树。人们通常做的是创建一个节点操作符WCBst::begin()
在解除对节点编辑器的引用时获取第一个节点。然后您可以创建一个NodeIterator&NodeIterator::operator++()代码>在树上行走。您可以使用节点
作为节点运算符
。