Удаление вершины дерева - C (СИ)
Формулировка задачи:
алгоритм почему то не работает... программа просто выкидывает, синтаксических ошибок нет
Заранее спасибо за помощь)
void tree_delete (tree *r)
{
if (!(r->l)&&!(r->r))
{
delete r;
r=NULL;
}
else
{
if (!r->r)
{
tree *p=r;
r=r->l;
delete p;
}
else
{
if (!r->l)
{
tree *p=r;
r=r->r;
delete p;
}
else
{
tree *m=tree_max(r->l);
r->i=m->i;
tree_delete (m);
}
}
}
}
//Удаление вершины с максимальным значением из левого поддерева
tree *tree_max(tree *r)
{
while (r->r)
r=r->r;
return r;
}Решение задачи: «Удаление вершины дерева»
textual
Листинг программы
if (!r->r&&!r->l)
{
r=NULL;
delete r;
}
Объяснение кода листинга программы
В данном коде выполняется проверка условия, при котором рекурсивно вызывается функция для удаления вершины дерева. Если условие не выполняется, то значение переменной r присваивается значению NULL, после чего вызывается функция delete для освобождения памяти.
- Проверка условия:
if (!r->r&&!r->l) - Вызов функции для удаления вершины дерева (рекурсивный вызов):
r=NULL; - Освобождение памяти:
delete r;