繁体   English   中英

从二叉树中删除节点

[英]Deleting node from binary tree

抽象类的二叉树。 我有三种删除方法,第一种是用户菜单,其他是递归的。 删除一个节点后,我遇到了减少节点计数的问题。 请帮忙,我应该在哪里写“r->count--”?

Node* Del(Node *t, Node *t0) {
    if (t->left != nullptr) {
        t->left = Del(t->left, t0);
        return t;
    }
    t0->o = t->o;
    Node *x = t->right;
    delete t;
    return x;
}
Node* deleteNodes(Node *r, Node *elem, bool &deleted) {
    bool del;
    if (r == nullptr) {
        deleted = false;
        return r;
    } 
    if (equal(elem->o, r->o) < 0) {
        r->left = deleteNodes(r->left, elem, del);
        deleted = del;
        return r;
    }
    else if (equal(elem->o, r->o) > 0) {
        r->right = deleteNodes(r->right, elem, del);
        deleted = del;
        return r;
    }
    deleted = true;
    if (r->left == nullptr && r->right == nullptr) {
        delete r;
        return nullptr;
    }
    if (r->left == nullptr) {
        Node *x = r->right;
        delete r;
        return x;
    }
    if (r->right == nullptr) {
        Node *x = r->left;
        delete r;
        return x;
    }
    r->right = Del(r->right, r);
    return r;
}

您应该将它放在找到要删除的节点的代码中。 这也是您将deleted设置为true地方:

所以:

deleted = true;
r->count--;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM