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

Упорядоченное дерево, функция вставки нового узла - C++

Восстановить пароль Регистрация
 
Battle_Hamster
 Аватар для Battle_Hamster
1 / 1 / 0
Регистрация: 27.12.2013
Сообщений: 90
17.01.2014, 02:04     Упорядоченное дерево, функция вставки нового узла #1
Приветствую!
Помогите закончить функцию вставки узла в дерево. дерево должно быть упорядоченно.
Для справки текст задания:
На входе получаем количество работников, затем количество работников, над которыми может шефствовать этот человек и его имя.
Вывод должен быть функцией postorder, соответственно в структуре должны быть указатели на отца и на таблицу детей.
Но что-то я не совсем понимаю функцию добавления. Попытка переделки из бинарного дерева выглядит так(извиняюсь, учусь в Польше, по большей части в комментариях всё обозначено):
C++ (Qt)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <string.h>
 
using namespace std;
 
 
struct wezel //
{
  string imie; // имя работника
   wezel *ojciec,**synowie; // указатели к отцу и к таблице детей
   int liczba_synow, max_synow;
};
 
 
 
void add_wezel(string imie, int liczba_synow,wezel *&moje_drzewo, int &liczba_pracownikow) //функция добавления узла wezel - узел drzewo - дерево
{
    if (liczba_pracownikow==0) return;
    if(NULL==moje_drzewo)
    {
        moje_drzewo=new wezel;
        moje_drzewo->imie=imie;
        moje_drzewo->ojciec=NULL;
        moje_drzewo->max_synow=liczba_synow;
        moje_drzewo->liczba_synow = 0; // сколько сыновей у уже созданного узла
        moje_drzewo->synowie = new wezel*[moje_drzewo->max_synow];
        for(int i=0; i<moje_drzewo->max_synow; i++)
        {
            moje_drzewo->synowie[i]=NULL;
        }
 
        --liczba_pracownikow;
 
        cin>>liczba_synow;
        getline(cin, imie);
        getline(cin, imie);
        add_wezel(imie,liczba_synow,moje_drzewo,liczba_pracownikow);
    }
 
    else
         if (moje_drzewo->liczba_synow <  moje_drzewo->max_synow)
         {
             --liczba_pracownikow;
             wezel *tmp = new wezel;
             tmp->imie = imie;
             tmp->max_synow = liczba_synow;
             tmp->liczba_synow = 0;
             tmp->ojciec=moje_drzewo;
             moje_drzewo->synowie[0]=tmp;
             moje_drzewo->synowie[moje_drzewo->liczba_synow] = tmp;
 
             tmp->synowie = new wezel*[tmp->max_synow];
             for(int i=0; i<tmp->max_synow; i++)
             { tmp->synowie[i]=NULL;
             }
 
             ++moje_drzewo->liczba_synow;
             cin>>liczba_synow;
             getline(cin, imie);
             getline(cin, imie);
             add_wezel(imie,liczba_synow,moje_drzewo,liczba_pracownikow);
        }
 
        else
             {
             wezel *syn = new wezel;
             syn->imie = imie;
             syn->ojciec=moje_drzewo->synowie[moje_drzewo->liczba_synow];
             syn->liczba_synow = 0;
             syn->max_synow = liczba_synow;
             syn->ojciec=tmp;
             syn->synowie = new wezel*[liczba_synow];
             for(int i=0; i<syn->max_synow; i++)
             { syn->synowie[i]=NULL;
             }
             syn=tmp->synowie[tmp->liczba_synow];
             ++moje_drzewo->liczba_synow;
 
             cin>>liczba_synow;
             getline(cin, imie);
             getline(cin, imie);
             add_wezel(imie,liczba_synow,moje_drzewo,liczba_pracownikow);
 
 
            }
 
}
 
 
 
int main()
{
    string imie;
    int liczba_synow;
    int liczba_pracownikow;
    wezel *moje_drzewo=NULL;
 
   cin>>liczba_pracownikow;
   getline(cin, imie);
   getline(cin, imie);
   cin>>liczba_synow;
   add_wezel(imie,liczba_synow,moje_drzewo, liczba_pracownikow);
 
 
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2014, 02:04     Упорядоченное дерево, функция вставки нового узла
Посмотрите здесь:

Бинарное упорядоченное дерево C++
C++ Вставка узла в дерево Windows Explorer
C++ Подскажите, как сделать сдвиг массива вправо для вставки нового элемента?
Функция вставки в list C++
Дерево с приведенной структурой узла C++

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

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

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