这是我的代码的相关部分,涉及重载operator ++以查找并返回二叉搜索树的后继节点。我已经测试了树本身,并且它正确地形成了,并且正确地使用了一个顺序遍历函数。
但我不能为我的生活弄清楚我在重载运算符++时遇到了什么问题。我尝试了很多不同的版本,而这个最新的版本nextInorderSuccessor在重载的运算符++中完成/不调用时返回后继者
这一点,以及我已经制作了多个版本的运算符++的事实,让我相信我只是处理实际的重载运算符错误。任何人都可以提供任何见解吗?
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;
}