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

Реализовать n-арное дерево в виде класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Абстрактные классы, наследование http://www.cyberforum.ru/cpp-beginners/thread276311.html
Задание: Написать базовый абстрактный класс «фигура» (с чистыми виртуальными функциями: нарисовать, передвинуть, повернуть) и два класса наследника окружность и квадрат, с различной реализацией этих функций. В основной программе создать массив указателей базового класса на объекты классов наследников. Передвинуть все объекты на одинаковое расстояние. Помогите плиз, кто чем может=) ...
C++ Подбросьте ответы упражнений из книги Кернигана и Ритчи Уважаемые гуру, скинте п-та ссылочку на ответы упражнений из книги "Язык программирования С" Кернигана и Ричи. с меня ++ Купил книгу, хороша но вот то что нет ответов это жирный "-". http://www.cyberforum.ru/cpp-beginners/thread276306.html
C++ учебники
Доброго времени суток, уважаемые программисты. Посоветуйте пожалуйста учебники для c++ что бы за пол года освоить и выйти хотяб на республиканскую олимпиаду. Желательно по матрицам(типо города, найти кратчайший путь, и т.п.)
Как рассчитать невязку в программе?? C++
#include <iostream.h> #include <math.h> #include <conio.h> int sign(double x) { if (x < 0) return -1; else return 1; } void main()
C++ Определить, какая цифра находится в заданной позиции в последовательности степеней десятки http://www.cyberforum.ru/cpp-beginners/thread276283.html
Ограничение времени: 1.0 секунды Ограничение памяти: 16 МБ Представим себе бесконечную последовательность цифр, составленную из записанных друг за другом возрастающих степеней десятки. Вот начало этой последовательности: 110100100010000… Всё, что надо — определить, какая цифра находится в такой последовательности на определённом месте. Исходные данные В первой строке находится целое число N...
C++ ATOI конвертации, непонятная ошибочка кусок должен принимать чар в буффер, N нужно лишь для проверки #include <stdio.h> #include <stdlib.h> char *buffer1; int N; ... printf("Введите значение N"); scanf_s ("%s", &buffer1); подробнее

Показать сообщение отдельно
AkylaQD
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 5
18.04.2011, 14:02  [ТС]     Реализовать n-арное дерево в виде класса
Переписал код класса дерева, теперь функция поиска элемента по индексу и функция добавления элемента работают правильно. Нужно написать функцию пересчета зарядов во всех элементах дерева, а вот не получается в этой функции реализовать полный обход дерева и пересчет зарядов в каждом элементе и дочерних ему элементах.Помогите пожалуйста разобраться с функцией пересчета , моя реализация это Recalculate(TreeNode* root), но при проверке выясняется что она обходит не все элементы дерева, что я не так написал?

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
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
 
using namespace std;
 
 
class TreeNode
{
    public:
        TreeNode()
        {
            childs=NULL;
        }
 
        
         void add_child(TreeNode* pTRN)
        {
            pTRN->pNext = childs;
            childs = pTRN;
        }
 
 
 
        TreeNode *childs;
        TreeNode *pNext;
        TreeNode *pparent;
        int index;  
                unsigned int nChildCount; // amount of chidren
        int charge; //The charge in this node.
};
 
class Tree  
{
        public:
        Tree()
        {
            IND=0;
                root.charge=10;
            root.index=IND;
            root.nChildCount=0;
            //TreeNode* pHead = 0;
            root.pparent=NULL;
            root.childs=NULL;
            root.pNext=NULL;
        }
        /*TreeNode* FindNode(int nb,TreeNode *pNode)
        {
          FindNodeinChild();
         
        }*/
 
 
        TreeNode* FindNode(int nb,TreeNode *root)
        {
        
        TreeNode *found = NULL;
        TreeNode *pNode;
        pNode = root;
 
        found = NULL;
 
        if(nb>IND)
        {
           cout << "\n Г’Г*êîãî ýëåìåГ*ГІГ* Г*ГҐГІГі";
          // return 1;
        }
        
        if(pNode!=NULL)
        {
            while(found == NULL)
            {
                if(nb==pNode->index)
                {
                    found = pNode;
                } 
                else
                {
                    found = FindNode(nb, pNode->childs);
                }
                 pNode=pNode->pNext;
            }
        }
         return found;
        }
    
        TreeNode* create_node(int nb)
        {
               
            
            IND+=1;
            TreeNode *pNode = new TreeNode; 
            pNode->nChildCount=0;
            pNode->index=IND;
            pNode->charge=10;
            pNode->pNext=NULL;
            pNode->childs=NULL;
            if(nb==0)
            {
                  pNode->pparent=&root;
 
                  root.add_child(pNode);
 
                  root.nChildCount+=1;
                return pNode;                                     
             }  
             else
             {
                  TreeNode *rt;// = new TreeNode;
                  rt = FindNode(nb, &root);
                  pNode->pparent=rt;
                  rt->add_child(pNode);
                  rt->nChildCount+=1;
                return pNode;
             }
 
 
        }
 
        /*void Recalculate(TreeNode *root)
        {
            TreeNode *pNode;
                    pNode = root;
        
                    if(pNode!=NULL)
                    {
            pNode->charge-=1;
 
            if(pNode->nChildCount>0)
            {
            //  pNode->charge-=1;
            if(pNode->nChildCount==1)
            {
                pNode->charge-=pNode->nChildCount;
 
            }
            if(pNode->nChildCount==2)
            {
                TreeNode *pNode2;
                pNode->charge-=pNode->nChildCount;
                pNode2=pNode->childs;
                pNode2->charge+=1;
                pNode2=pNode2->pNext;
                pNode2->charge+=1;
            }
            if(pNode->nChildCount==3)
            {
                TreeNode *pNode2;
                pNode->charge-=pNode->nChildCount;
                pNode2=pNode->childs;
                pNode2->charge+=2;
                pNode2=pNode2->pNext;
                pNode2->charge+=2;
                pNode2=pNode2->pNext;
                pNode2->charge+=2;
            }
            if(pNode->nChildCount>3)
            {
                TreeNode *pNode2;
                pNode->charge-=pNode->nChildCount;
                pNode2=pNode->childs;
 
 
                
                for(int i=0; i<=pNode->nChildCount; i++)
                {
                    pNode2=pNode2->pNext;
                    pNode2->charge-=pNode->nChildCount-3;
 
                }
            }
                    }
 
            
            Recalculate(pNode->childs);
                        pNode=pNode->pNext;
                    }       
        }*/
 
        TreeNode& return_root()
        {
            return root;
        }
    private:
        TreeNode root;
        int IND;
        int i;
 
};
};
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru