AVL-tree clearing



我不知道,为什么_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链接节点,为什么他们不删除?

问题就在这里:

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

您通过值传递了指向Node的指针,但是您想更改指针并将更改传播到函数外。c++的方法是将引用传递给指向-Node:

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

p。标识符不要以下划线开头。这是为库实现者保留的。所以:

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

最新更新