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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ход коня по шахматной доске случайным образом http://www.cyberforum.ru/cpp-beginners/thread884942.html
Используйте генерацию случайного числа для предоставления коню возможности ходить по шахматной доске случайным образом (конечно, только допустимым Сам понимаю, что ужасно туплю сейчас, но все же я только учусь. Вопрос находится в заголовке. Суть проблемы: понимаю как сделать, но не могу реализовать в программу. #include <iostream> #include <iomanip> #include <ctime>
C++ Обработка записей (список учеников имеет следующую структуру: фамилия – номер школы – число баллов по ЕГЭ – оценка) Разработать и отладить программу обработки записей. Предусмотреть: - ввод данных - вывод результатов (на экран в виде таблицы и в файл) Задача: Список учеников имеет следующую структуру: фамилия – номер школы – число баллов по ЕГЭ (от 0 до 100) – оценка. При вводе числа баллов рассчитайте оценку (до 40 баллов – «2», 40-59 баллов – «3», 60-89 баллов – «4», 90-100 баллов – «5») и... http://www.cyberforum.ru/cpp-beginners/thread884939.html
Прямые на плоскости(С++) C++
Доброго времени суток господа. Помогите пожалуйста написать эту задачку в С++. Сам с этой задачей пока не разбирался, времени нету, а задач много :cry: (сам пока другими разбираюсь :pardon:) Прямая на плоскости может быть задано уравнением ax+by+c=0, где a и b одновременно не равны нулю. Будем рассматривать прямые только с целыми коэффициентами a,b,c.Пусть даны коэффициенты нескольких прямых:...
void в проекте на c++ C++
Создаю проект, создал модули состоящие из текста! пытаюсь объединить все в одном модуле вывод ошибку! что нужно исправить вот код #include <iostream> #include <stdio.h> #define CASE using namespace std; void arp (); void ipconfig (); void getmac (); void nbtstat (); void netsh ();
C++ написать такой класс, который представляет собой двоичное число http://www.cyberforum.ru/cpp-beginners/thread884891.html
не могу справиться вот с этим: написать такой класс, который представляет собой двоичное число. биты держит в виде объекта std::vector <bool>. написать для этого класса следующие операции: слож, выч, умнож, и битовые операции 'и' и 'или' (числа могут быть разной длины, в этом случае они выравниваются по младшему(правому) биту) помогите пожалуйста кто чем может. Хотя бы с чего начать
C++ Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10 (Netbeans) Ребят, помогите пожалуйста написать программу для данной задачи: Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10. Никак не получается:( Либо ошибку выдает либо ответ несоответствующий условию выходит. подробнее

Показать сообщение отдельно
ATVT
Сообщений: n/a

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

30.05.2013, 13:53. Просмотров 182. Ответов 0
Метки (Все метки)

Нужно написать код для удаления элемента из дерева, почему-то всегда возвращает 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);
                    //------------------------
                    }
               }
         }
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru