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

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

Войти
Регистрация
Восстановить пароль
 
xelsinoilat
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 4
#1

Функция: удаление узла дерева со всеми потомками - C++

08.01.2010, 01:11. Просмотров 480. Ответов 6
Метки нет (Все метки)

подскажите код функции которая удаляет элемент дерева со всеми его потомками

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
NODE *SEARCH(char *key, NODE *root)
{
    NODE *cur=root;
    if(cur==NULL)
    {
        cout<<"\n Data Base is empty.";
        return cur;
    }
    
    if(stricmp(cur->info->name, key)>0)
        return SEARCH(key, cur->left);
    else
        if(stricmp(cur->info->name, key)<0)
            return SEARCH(key, cur->right);
        else
            return cur;
}
 
void DEL(NODE *p)
{
    if(p!=NULL)
    {
        if(p->left!=NULL)
            DEL(p->left);
        if(p->right!=NULL)
            DEL(p->right);
        delete p;
    }
    
}
 
void DELETE_EL(char *key, NODE *root)
{
    NODE *p;
    p=SEARCH(key, root);
    DEL(p);
}






первая функция ищет узел с заданным ключом. вторая удаляет ветвь а третья решает задачу. что в них не так подскажите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2010, 01:11     Функция: удаление узла дерева со всеми потомками
Посмотрите здесь:

Удаление узла из дерева - C++
сделав функции добавления,поиска,пару обходов и вывод ввиде дерева в консоли(жаль что нельзя размер по x изменить) при тестировании...

Удаление узла дерева - C++
Добрый вечер. У меня маленькая проблема - написал шаблон для работы с бинарным деревом поиска. Вроде асе робит, но возникла проблема с...

Удаление дерева каталогов со всеми файлами - C++
Как, за один проход?

Удаление узла бинарного дерева, проблема с функциями, адресацией - C++
код: #include &lt;cstdlib&gt; #include &lt;iostream&gt; typedef struct tree{ // обьявляем тип char data; //дата изьятия в формате xx.xx.xxxx ...

Как сгенерировать ключ для узла дерева? - C++
В C# для создания сквозной нумерации текстовых заметок можно было просто объявить целую static-переменную в описании класса заметки,...

Определение глубины (числа ветвей) непустого дерева от вершины до заданного узла - C++
Подскажите пожалуйста. Никак не могу найти код нахождения глубины бинарного дерева от вершины до заданного узла. тут весь форум перерыл...

RB tree удаление узла - C++
Народ, подсткажите рекурсивный алгоритм удаления узла RB tree, или где найти можно... второй день в гугле сижу, видимо руки не от туда...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.01.2010, 01:21     Функция: удаление узла дерева со всеми потомками #2
вот:
Цитата Сообщение от xelsinoilat Посмотреть сообщение
void DEL(NODE *p)
xelsinoilat
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 4
08.01.2010, 01:29  [ТС]     Функция: удаление узла дерева со всеми потомками #3
в чем здесь ошибка?
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.01.2010, 01:31     Функция: удаление узла дерева со всеми потомками #4
это ты скажи. в чем проявляется ошибка?
xelsinoilat
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 4
08.01.2010, 01:34  [ТС]     Функция: удаление узла дерева со всеми потомками #5
в общем удалять то удаляет, но после удаления элемента остальные не выводятся на печать и новые элементы не добавляются. хотя функции добавления и печати проверены и работают правильно до первого удаления. как то криво объяснил
niXman
Эксперт C++
3134 / 1446 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
08.01.2010, 01:37     Функция: удаление узла дерева со всеми потомками #6
C
1
2
3
4
5
6
7
8
9
10
11
12
void DEL(NODE *p)
{
        if(p!=NULL)
        {
                if(p->left!=NULL)
                        DEL(p->left);
                if(p->right!=NULL)
                        DEL(p->right);
                delete p;
                p = NULL;
        }  
}
попробуй так.
но я не думаю что это поможет.

покажи функцию которая добавляет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2010, 01:42     Функция: удаление узла дерева со всеми потомками
Еще ссылки по теме:

Удаление узла в линейном списке - C++
У меня есть структура (файловая система) , я могу помещать туда файлы (здесь все работает). Содержаться следующие поля : имя файла , время...

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

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

Односвязный список (очередь). Удаление узла - C++
Необходимо определить есть ли в списке узел, содержащий значение, введенное с клавиатуры. Если такое значение есть, удалить этот узел....

Бинарное дерево из слов и удаление узла - C++
Ребят нужно создать дерево где пользователь вводит слова, они записываются в дерево, а потом вводит слово которое хочет удалить из него....


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

Или воспользуйтесь поиском по форуму:
xelsinoilat
0 / 0 / 0
Регистрация: 08.01.2010
Сообщений: 4
08.01.2010, 01:42  [ТС]     Функция: удаление узла дерева со всеми потомками #7
ты прав, не помогло. вот функция добавления. все идеально работает до удаления элемента.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
NODE *NEW_NODE(MOVIE *data)
{
    NODE *temp;
    temp=(NODE*)malloc(sizeof(NODE));
    temp->info=(MOVIE*)malloc(sizeof(MOVIE));
    temp->info=data;
    temp->left=NULL;
    temp->right=NULL;
    return temp;
}
 
 
 
NODE *ADD(NODE *root, MOVIE *data)
{
    NODE **prior;
    NODE *ptr;
 
    NODE *NEW_NODE(MOVIE *data);
    if (root!=NULL)
    {
        ptr=root;
        while (ptr!=NULL)
            if (strcmp(data->name, ptr->info->name)<=0)
            {
                prior=&ptr->left;
                ptr=ptr->left;
            }
            else
            {
                prior=&ptr->right;
                ptr=ptr->right;
            }
            *prior=NEW_NODE(data);
            return root;
    }
    return NEW_NODE(data);
}
Yandex
Объявления
08.01.2010, 01:42     Функция: удаление узла дерева со всеми потомками
Ответ Создать тему
Опции темы

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