我不知道,为什么_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)