重载operator ++以查找并返回二叉搜索树的后继节点

时间:2017-04-06 10:21:50

标签: c++ operator-overloading binary-search-tree

这是我的代码的相关部分,涉及重载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;
}

0 个答案:

没有答案