c++ AVL树清除

qfe3c7zg  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(117)

我不知道,为什么_clear不从树中删除元素。可能,需要重写析构函数。

class Node {
    T _val;
    Node *_left;
    Node *_right;
    int _height;

    explicit Node(T _val = T()) : _val(_val), _left(nullptr), _right(nullptr), _height(1) {};

    friend class AVL_Tree<T>;
};

void AVL_Tree<T>::_clear(Node<T>*vertex) {
    if(vertex != nullptr) {
        _clear(vertex->_left);
        _clear(vertex->_right);
        delete vertex;
    }
    vertex = nullptr;
}

有保持NULL的链接节点,为什么它们不删除?

fumotvh3

fumotvh31#

问题就在这里:

AVL_Tree<T>::_clear(Node<T>*vertex)

您通过值传递了一个指向Node的指针,但是您希望更改该指针并将更改传播到函数之外。C++的方法是将一个 reference 传递给指向-Node的指针:

AVL_Tree<T>::_clear(Node<T>*&vertex)

注意:标识符不要以下划线开始,这是为库实现者保留的。因此:

AVL_Tree<T>::clear(Node<T>*&vertex)

相关问题