Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
#1

Как работает алгоритм удаления дерева - C++

29.07.2010, 22:58. Просмотров 1185. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct tree
{
Ti;
tree <T> *l, *r;
}
 
void tree_remove (tree <T> *&r)
{
if (!r) return;
tree_remove (r->l);
tree_remove (r->r);
delete r;
r=NULL;
}
вобщем чё-то клинит меня и никак не могу понять вроде бы элементарную вещь: функции
tree_remove (r->l);
tree_remove (r->r);
вызываются одновременно или последовательно???
и вапще удалит ли вся эта функция дерево полностью сразу или нужно создать для неё цикл, т.к. она будет удалять крайние вершины??
подскажите пожалуйста.... заранее огромное спасибо))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2010, 22:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работает алгоритм удаления дерева (C++):

Функция удаления элемента из дерева - C++
В данной программе реализовано почти все,кроме фунции удаления,которую я так и не смог реализовать. Руководствуюсь методами: -если это...

Итерационный метод удаления бинарного дерева - C++
Есть бинарное дерево поиска нужно создать итерационный метод удаления дерева. Вот есть функция удаления дерева но при удалении происходит...

Удаления узла из бинарного дерева поиска - C++
Уже довольно много времени убил на эту задачу, теорию понимаю, на практике реализовать никак не получается. Помогите пожалуйста написать...

Функция удаления элемента из дерева, ошибка в коде - C++
Добрый вечер, уважаемые программисты! :) Помогите, пожалуйста, понять где здесь ошибка. static bool h = false; // узел...

Функция удаления листа (или ветки) бинарного дерева - C++
Здравствуйте программисты! Учусь на первом курсе. Возникли проблемы с разработкой функции удаления ветки листа или корня из дерева. Т.е....

Функция удаления всех четных элементов AVL-дерева - C++
Помогите допилить функцию удаления всех парных элементов АВЛ дерева. Она сейчас удаляет только элементы, которые находятся в правой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.07.2010, 23:02 #2
Цитата Сообщение от Flamе Посмотреть сообщение
вызываются одновременно или последовательно???
Последовательно.
Цитата Сообщение от Flamе Посмотреть сообщение
и вапще удалит ли вся эта функция дерево полностью сразу или нужно создать для неё цикл, т.к. она будет удалять крайние вершины??
Удалит рекурсивно все дерево.

Есть более простое решение без лишних функций. Достаточно в деструкторе узла дерева удалить поддеревья:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template<typename T>
struct TreeNode<T> {
   // ...
   ~TreeNode() {
      delete left;
      delete right;
   }
   TreeNode<T>* left;
   TreeNode<T>* right;
   // ...
};
 
// ...
// root - корень дерева
delete root; // Удаление корня вызовет рекурсивное удаление всего дерева
// ...
Постигайте рекурсию.
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
29.07.2010, 23:08  [ТС] #3
спасибо)) да, походу с рекурсией у меня проблема... мозг её не осиливает))
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.07.2010, 23:10 #4
Цитата Сообщение от Flamе Посмотреть сообщение
спасибо)) да, походу с рекурсией у меня проблема... мозг её не осиливает))
Это наиболее сложная для мозга тема в программировании, так что это нормально. Больше практикуйтесь. Бинарные деревья неплохо подходят для этой цели.
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
29.07.2010, 23:10  [ТС] #5
всё же спрошу ещё кое-что... как работает эта рекурсия? ведь мы движемся по вершинам вниз, а назад не возвращаемся?? или для каждой вершины, принимая её как корень нового дерева, данная функция работает несколько раз, пока не удалит её??
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.07.2010, 23:15 #6
Цитата Сообщение от Flamе Посмотреть сообщение
для каждой вершины, принимая её как корень нового дерева, данная функция работает несколько раз, пока не удалит её??
Именно так, сначала полностью удаляется левое поддерево, затем правое. Попробуйте мысленно развернуть очередь рекурсионных вызовов. Должно помочь.
Flamе
9 / 9 / 0
Регистрация: 25.10.2009
Сообщений: 152
29.07.2010, 23:18  [ТС] #7
ещё раз спасибо))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2010, 23:18
Привет! Вот еще темы с ответами:

Не могли бы объяснить, как работает эта функция для удаления цифр? - C++
char* delDig(char *S) { int i,j; i=0; for (j=0; j&lt;strlen(S); j++) if ((S &lt; '0') || (S &gt; '9')) S=S; S=0;...

Алгоритм удаления цифр из числа - C++
Друзья,подскажите пожалуйста кто-нибудь алгоритм удаления определённых цифр из числа... Например есть число 5000490938 : нужно из него...

Алгоритм удаления элемента из массива - C++
Помогите написать код:( Условие задачи таково: Заменить максимальный элемент из первых четырех его абсолютным значением, если они все...

Алгоритм удаления записи из базы данных - C++
У меня есть алгоритм записи в файл: void Add(Abbase&amp; d, int&amp; ch) { system (&quot;cls&quot;); ofstream fout(&quot;base.txt&quot;,ios::app); cout...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.07.2010, 23:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru