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

Дерево общего вида (да опять я) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ составить блок схему к алгоритму обработки строки. http://www.cyberforum.ru/cpp-beginners/thread332483.html
с клавиатуры вводится строка. выберите из нее все буквы A(a) до I (i). строчные преобразуйте в прописные и отсортируйте в алфавитном порядке
C++ Удаление вектора из области динамической памяти. Всем привет! Прошу разъяснить. Как правильно удалить содержимое вектора? class Coordinate { public: Coordinate() {} int *getCoord() { return itsCoord; } http://www.cyberforum.ru/cpp-beginners/thread332472.html
C++ Обработка событий (events) в Visual Studio
У меня есть два события, они выполняют одинаковые действия, можно ли как то сделать вызов одного события в другом?
C++ Разряженная матрица
Добрый вечер, можете посмотреть код программы на неточности , тупости и тп. спс зарание за помощь. задание - компактный вывод разряженной матрицы . разряженная - это матрица в которой преймущественно нули. выводиться же все ненулевые - и под ними номер ее позиции. п.с. извените за корявый ввод матрицы =\ переделывал в позднее время.. так уж случилось #include "iostream"
C++ Сложение в матрице http://www.cyberforum.ru/cpp-beginners/thread332443.html
Нужно сложить в матрице отдельно каждый столбец и каждую строчку как я понял что то на подобе функции математической суммы в экселе к примеру 1 2 3 4 5 15 2 4 6 3 3 18 3 6 9 7 9 Примерное начало
C++ Файл о студентах Здравствуйте, форумчане! Дана такая задача: Создать файл, содержащий сведения о том, какие из 5 предложенных дисциплин желает слушать студент. Структура записи: фамилия студента; № группы; средний балл; 5 дисциплин, где '*' показывает выбранную дисциплину. Создать файл, содержащий данные о тех, кто желает прослушать дисциплину XX. Если желающих больше 10, то отобрать тех студентов, у... подробнее

Показать сообщение отдельно
FinKeRosiN
3 / 2 / 0
Регистрация: 27.12.2010
Сообщений: 31
14.07.2011, 18:40  [ТС]     Дерево общего вида (да опять я)
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
// Добавление элемента в дерево
void Add(Node *&top, int Key, int AddKey)
{
 
 
    if(top == NULL)
    {
 
        top = new Node;
        top -> data.Key = Key;
        top -> brother = NULL;  
        top -> son = NULL;
 
        return;
    }
    else
    {
        if(top->data.Key == AddKey && top->son==NULL) 
        {
            Add(top->son, Key, AddKey); 
            return;
        }
        if(top->data.Key == AddKey && top->son!=NULL)
        {
            if(top->son->brother==NULL)
            {
                Add(top->son->brother, Key, AddKey);
                return;
            }
            if(top->son->brother!=NULL && top->son->brother->brother==NULL)
            {
                Add(top->son->brother->brother, Key, AddKey);
                return;
            }
            if(top->son->brother!=NULL && top->son->brother->brother!=NULL)
            {
                Node *tmp=top;
                while(tmp->son->brother->brother!=NULL)
                    tmp->son->brother=tmp->son->brother->brother;
                Add(tmp->son->brother->brother, Key, AddKey);
                return;
            }
        }
 
    }
 
}
новый код


сейчас проблема в добавлении брата, если 2 брата уже есть
из-за того что передаю top->son->brother->brother как бы бугвой "Г": от корня к сыну, от сына к брату. то после вызова функции проверяется не следующий брат, а потомки текущего

т.е. не надо найти способ перецеплять указатель с top->son->brother на top->son->brother->brother "без углов"
примерно так=))

Добавлено через 10 минут
из-за етого у меня больше 3х братьев быть не может
или больше 4х как здесь:
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
// Добавление элемента в дерево
void Add(Node *&top, int Key, int AddKey)
{
 
 
    if(top == NULL)
    {
 
        top = new Node;
        top -> data.Key = Key;
        top -> brother = NULL;  
        top -> son = NULL;
 
        return;
    }
    else
    {
        if(top->data.Key == AddKey && top->son==NULL) // добавить сына, если нет сыновей у корня
        {
            Add(top->son, Key, AddKey); 
            return;
        }
        if(top->data.Key == AddKey && top->son!=NULL) 
        {
            if(top->son->brother==NULL)                     // добавить брата сыну, если есть такой
            {
                Add(top->son->brother, Key, AddKey);
                return;
            }
            if(top->son->brother!=NULL && top->son->brother->brother==NULL) // добавить брата, если есть уже 1 брат
            {
                Add(top->son->brother->brother, Key, AddKey);
                return;
            }
            if(top->son->brother!=NULL && top->son->brother->brother!=NULL) // добавить брата, если уже есть 2 брата
            {
                
                
                Add(top->son->brother->brother->brother, Key, AddKey);
                return;
            }
        }
        if(top->data.Key != AddKey && top->son!=NULL)   
        {
            Add(top->son->son, Key, AddKey);
        }
    }
 
}
Добавлено через 40 минут
т.е. трабл в том что я добавляю не нового брата, а именно брата сыну, брата брату и брату третьему брату
кладу значение в заготовленную ячейку, а не создаю следующую.

Добавлено через 17 часов 53 минуты
Все. сдал на 4
 
Текущее время: 15:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru