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

Удаление элемента из дерева - C++

Восстановить пароль Регистрация
 
ATVT
Сообщений: n/a
30.05.2013, 13:53     Удаление элемента из дерева #1
Нужно написать код для удаления элемента из дерева, почему-то всегда возвращает NULL в функциях Right и Left, и следовательно newnode->x не существует, помогите разобраться в чем дело

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Node * Left(Node *MDer) {
    if (MDer == NULL)
        return NULL;
    if (MDer->l!=NULL) {
        return Left(MDer->l);
    } else
    return MDer;
}
Node *Right(Node *MDer) {
    if (MDer == NULL)
        return NULL;
    if (MDer->r!=NULL) {
        return Right(MDer->r);
    } else
    return MDer;
}
 
void Del(Node * MDer, int x)
{
if (MDer==NULL)
printf("Empty\n");
 
if (x<MDer->x)
Del(MDer->l, x);
else 
         if(x>MDer->x)
         Del(MDer->r, x);
         else  {
               if((MDer->l==NULL)&&(MDer->r==NULL)) 
                         {
                         if (MDer->p->l==MDer) 
                            MDer->p->l=NULL;
                         else      
                                   MDer->p->r=NULL;
                         delete MDer;
                         }
               else {
                    if ((MDer->l=NULL)||(MDer->r=NULL)){
                    if(MDer->l=NULL){
                    MDer->r=MDer->r->r;
                    MDer->l=MDer->r->l;
                    MDer->x=MDer->r->x;
                    MDer->p=MDer->r->p;                   
                    }
                    else{
                    MDer->r=MDer->l->r;
                    MDer->l=MDer->l->l;
                    MDer->x=MDer->l->x;
                    MDer->p=MDer->l->p;       
                    }                    
                    } else{       
                    Node *newnode=NULL;
                    if(MDer->l!=NULL) 
                    newnode=Right(MDer->l);
                    else                    
                    newnode=Left(MDer->r);
                    //------------------------  
                    MDer->x=newnode->x;
                    Del(newnode,newnode->x);
                    //------------------------
                    }
               }
         }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2013, 13:53     Удаление элемента из дерева
Посмотрите здесь:

C++ Удаление вершин дерева
удаление из дерева C++
C++ вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
C++ Удаление узла дерева
C++ Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств )
Дополнение списка с обоих концов Удаление элемента из дерева по указанным значением информационную атрибута C++
Сделать добавление элемента в массив и удаление элемента из массива используя STL C++
C++ Удаление элемента из бинарного дерева

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru