我在使用递归函数中的后序遍历解除分配二进制树节点时遇到问题。
这是我的结构的一部分。我的树解构器将从根
开始解除分配struct Node {
Base * data;
Node * left, * right, *parent;
static long occupancy;
long balance;
long height;
Node (Base * element) : data (element), left (0), right (0),
parent (0), balance (0), height(0) {
occupancy++;
}
~Node (void) {
deleteNodes();
}
void deleteNodes (void) {
if(height == 0)
return;
if(left)
left->deleteNodes();
if(right)
right->deleteNodes();
if(left)
delete left;
if(right)
delete right;
delete data;
}
}
答案 0 :(得分:3)
您不需要以递归方式删除节点(如果您尝试多次删除指针,则可能会导致问题) - 如果删除则会自动(递归地)调用析构函数孩子们。
~Node (void) {
if (left)
delete left;
if (right)
delete right;
delete data;
}
答案 1 :(得分:1)
对于递归遍历,您始终将树的根作为参数传入。
void deleteNodes(Node *rover) {
//**check if rover is nullptr
deleteNodes(rover->left);
deleteNodes(rover->right);
//...
}
**你不需要检查rover-> left和rover-> right是否为nullptr,因为你在函数的开头检查它。
希望它有所帮助。