Есть реализация класса бинарного дерева, в котором присутствует функция для удаления узлов дерева.
Как правильно освобождать память в различных случаях ?
TreeNode<Node>* Tree<Node>::delete_node(TreeNode<Node> *z)
{
TreeNode<Node>* y;
TreeNode<Node>* x;
if (z->left == 0 || z->right == 0)/* в этой и следующих двух строках ищем вершину y, которую мы потом вырежем из дерева.
Это либо z, либо следующий за z */
y = z;
else
y = find_succsessor(z->get_data());
if (y->left != 0) /* x - указатель на существующего ребенка y или 0 если таковых нет */
x = y->left;
else
x = y->right;
if (x != 0)
x->parent = y->parent;
if (y->parent == 0)
root = x;
else
{
if (y == (y->parent)->left)
(y->parent)->left = x;
else
(y->parent)->right = x;
}
if (y != z)
z->data = y->get_data();
return y;
}