@tj57

Как правильно освобождать память при удалении узлов в бинарном дереве поиска?

Есть реализация класса бинарного дерева, в котором присутствует функция для удаления узлов дерева.
Как правильно освобождать память в различных случаях ?

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;
}
  • Вопрос задан
  • 425 просмотров
Пригласить эксперта
Ответы на вопрос 1
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Рекурсивно обойти всех детей узла и удалить. Если узлов много, то использовать обход в глубину и сохранять узлы в очереди.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы