Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 2
Регистрация: 20.11.2011
Сообщений: 73

Поменять сбалансированное на упорядоченное дерево

10.07.2012, 19:20. Показов 1054. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Даны функция формирования идеального сбалансированного дерева и функия вывода дерева на экран. Нужно поменять функцию сбалансированного дерева на упорядоченоое дерево. Элементы для дерева берутся из массива строк.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void __fastcall TForm1::Button3Click(TObject *Sender)      //ôîðìèðóåì äåðåâî
{
if(Edit3->Text != "")
        {if(root)excuse_tree(root);
         Memo1->Lines->Clear();
         i=0;
         insert(&root,n);
         print_tree(root,0);
        }
else {Application->MessageBoxA("Íå ââåäåí ìàññèâ!","Îøèáêà!");Button1->SetFocus();}
}
//---------------------------------------------------------------------
void print_tree(Node* p,int level)                                
        {print_tree(p->right,level+1);
         int s =Form1->Memo1->Lines->Add("");
         for(int j=0;j<level;j++)
         {Form1->Memo1->Lines->Strings[s] =
         Form1->Memo1->Lines->Strings[s] + "****";}
         Form1->Memo1->Lines->Strings[s] =
         Form1->Memo1->Lines->Strings[s] + p->str;
         print_tree(p->left,level+1);
        }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2012, 19:20
Ответы с готовыми решениями:

Упорядоченное дерево
Здравствуйте! Прошу помощи в решении следующей задачи: Определите функцию (ordered Tree), проверяющую является бинарное дерево Tree...

Бинарное упорядоченное дерево
Прошу помощи ибо сам не чего не понимаю.Нужно реализовать бинарное дерево добавить и удалить элементы. Пожалуйста кто чем может помогите.

Упорядоченное бинарное дерево
Привет всем! Такая вот задача: определить является ли бинарное дерево упорядоченным. Что имею: дерево задается так: ((nil 1...

2
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
10.07.2012, 20:48
На самом деле ты не показал "функцию формирования идеального сбалансированного дерева". Непонятно, что такое root, excuse_tree(), insert(), а без них это все шелуха.

В функции print_tree() следует ввести проверку указателей, так как используется рекурсия.
1
0 / 0 / 2
Регистрация: 20.11.2011
Сообщений: 73
10.07.2012, 21:16  [ТС]
вот весь код.
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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
Node *root=0;
void print_tree(Node* p,int level);
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Edit2->Text != "")   {if(mass) delete []mass;            //Ñîçäàåì ìàññèâ ñòðîê ââåäåííîé ðàçìåðíîñòè
                         Edit3->Text = "";
                         Memo1->Lines->Clear();
                         GroupBox1->Enabled = true;
                         Edit1->Color = clWindow;
                         GroupBox1->Caption = "Ýëåìåíò [0]";
                         n = StrToInt(Edit2->Text);
                         i = 0;
                         mass = new AnsiString [n];
                         Edit1->Text = "";
                         Edit1->SetFocus();
                        }
  else {Application->MessageBoxA("Íå ââåäåíà ðàçìåðíîñòü!","Îøèáêà!");
        Edit2->SetFocus();
       }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)       //çàïîëíÿåì ìàññèâ (ââîä ìàññèâà)
{int j;
if(Edit1->Text != "")
                {mass[i] = Edit1->Text;
                 Edit1->Text = "";
                 i++;
                 if(i != n)
                 {GroupBox1->Caption = "Ýëåìåíò [" + IntToStr(i) +"]";
                  Edit1->SetFocus();
                 }
                 else
                 {GroupBox1->Caption = "Ýëåìåíò [ ]";
                  GroupBox1->Enabled = false;
                  Edit1->Color = clMenu;
                  Edit1->Text = "Ìàññèâ ââåäåí.";
                  Label2->Caption = "Ââåäåííûé ìàññèâ:";
                  for(j=0;j<n;j++)
                  {Edit3->Text = Edit3->Text + mass[j] + " ";
                  }
                 }
                }
else {Application->MessageBoxA("Íå ââåäåí ýëåìåíò!","Îøèáêà!");
      Edit1->SetFocus();
     }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete []mass;
if(root)excuse_tree(root);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)      //ôîðìèðóåì äåðåâî
{
if(Edit3->Text != "")
        {if(root)excuse_tree(root);
         Memo1->Lines->Clear();
         i=0;
         insert(&root,n);
         print_tree(root,0);
        }
else {Application->MessageBoxA("Íå ââåäåí ìàññèâ!","Îøèáêà!");Button1->SetFocus();}
}
//---------------------------------------------------------------------
void print_tree(Node* p,int level)                                //âûâîä äåðåâà
{if(p)
        {print_tree(p->right,level+1);
         int s =Form1->Memo1->Lines->Add("");
         for(int j=0;j<level;j++)
         {Form1->Memo1->Lines->Strings[s] =
         Form1->Memo1->Lines->Strings[s] + "****";}
         Form1->Memo1->Lines->Strings[s] =
         Form1->Memo1->Lines->Strings[s] + p->str;
         print_tree(p->left,level+1);
        }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button5Click(TObject *Sender)        //ñëîé
{int df;
strl=0;
Edit5->Text = "";
if(!root)
{Application->MessageBoxA("Äåðåâî íå ñôîðìèðîâàíî!!","Îøèáêà!");Button3->SetFocus();}
else {df = tree_str(root,0);
      print_puff(root,df,0);
     }
}
//---------------------------------------------------------------------------
void print_puff(Node* p,int df,int d)               //ðàñïå÷àòàòü çàäàííûé ñëîé
{if(p->right)print_puff(p->right,df,d+1);           //åñëè ó ýëåìåíòà åñòü ïðàâûé ýëåìåíò, ïåðåõîäèì íà íåãî
 if(d == df)                            //åñëè ýëåìåíò íà íóæíîé ãëóáèíå ñëîÿ
 {Form1->Edit5->Text = Form1->Edit5->Text + p->str + " ";   //âûâîäèì åãî
 }
 if(p->left)print_puff(p->left,df,d+1);             //åñëè ó ýëåìåíòà åñòü ëåâûé ýëåìåíò, ïåðåõîäèì íà íåãî
}
//---------------------------------------------------------------------------
void vetv(Node* p,int depth,AnsiString str)         //âûâîäèò íà ïå÷àòü âåòâü ñ íóæíîé ñòðîêîé. ñòðîêà - ñàìàÿ äëèííàÿ ñòðîêà èñõîäíîãî ìàññèâà.
{
  if(p->str==str) found=true;                   //åñëè ñòðîêó íàøëè, çíà÷èò íàõîäèìñÿ â íóæíîé âåòêå è ðàñïå÷àòûâàåì ýëåìåíò
  {if(!found)
     {if(p->left) vetv(p->left,depth,str);          //ïîêà íå íàøëè ïåðåõîäèì ïî âåòâÿì äåðåâà.
      if(found ) {Form1->Edit4->Text=Form1->Edit4->Text + p->str+" "; return;}
      if(p->right) vetv(p->right,depth,str);
      if(found ) {Form1->Edit4->Text=Form1->Edit4->Text + p->str+" "; return;}
      return;
     }
  }
  Form1->Edit4->Text=Form1->Edit4->Text + p->str+" ";
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button6Click(TObject *Sender)         //âåòâü
{
if(!root)
{Application->MessageBoxA("Äåðåâî íå ñôîðìèðîâàíî!!","Îøèáêà!");Button3->SetFocus(); return;}
tree_str(root,0);
Edit4->Text="";
vetv(root,0,l);
}
Заголовочный файл.
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TGroupBox *GroupBox1;
        TButton *Button1;
        TEdit *Edit1;
        TEdit *Edit2;
        TLabel *Label1;
        TButton *Button2;
        TEdit *Edit3;
        TLabel *Label2;
        TButton *Button3;
        TButton *Button4;
        TMemo *Memo1;
        TEdit *Edit5;
        TButton *Button5;
        TLabel *Label4;
        TButton *Button6;
        TEdit *Edit4;
        TLabel *Label3;
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button4Click(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall Button3Click(TObject *Sender);
        void __fastcall Button5Click(TObject *Sender);
        void __fastcall Button6Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
int n,i;
AnsiString *mass=0;
struct Node
{AnsiString str;
 Node *left;
 Node *right;
};
//---------------------------------------------------------------------------
Node* first(AnsiString str);
void print_puff(Node* p,int df,int d);
int tree_key(Node* p,int k,int depht_puff);
void excuse_tree(Node *p);
void insert(Node **p,int k);
//---------------------------------------------------------------------------
Node* first(AnsiString str)//ñîçäàíèå êîðíÿ äåðåâà
{Node *pv = new Node;
 pv->str = str;
 pv->left  = 0;
 pv->right = 0;
 return pv;
}
//---------------------------------------------------------------------------
void insert(Node **p,int k)//âñòàâêà ýëåìåíòà â äåðåâî
{if(k>0){*p = first(mass[i]);//õèòðûå èôû ÷òîáû ïîñòðîèòü èäåàëüíî ñáàëàíñèðîâàííîå äåðåâî
         Node *pv = *p;
         i++;
         insert(&(pv->left),k/2);
        }
 if((k-k/2-1)>0)
        {Node *pv = *p;
         insert(&(pv->right),k-k/2-1);
        }
}
//---------------------------------------------------------------------------
void excuse_tree(Node *p)           //óäàëåíèå äåðåâà
{if(p->right)excuse_tree(p->right);
 if(p->left) excuse_tree(p->left);
 delete p;
}
int dm;
int strl;
AnsiString l;
//---------------------------------------------------------------------------
int tree_str(Node* p,int depht_puff)        //íàõîäèò è âîçðàùàåò íîìåð ñëîÿ, ñîäåðæàùèé ñàìóþ äëèííóþ ñòðîêó
{
 
 if(p)
 {if(p->str.Length()>strl) {dm=depht_puff; strl=p->str.Length();l=p->str;}
  if(p->left) tree_str(p->left,depht_puff+1);
  if(p->right) tree_str(p->right,depht_puff+1);
  return dm;
 }
}
 
 bool found=0;
 
 
//---------------------------------------------------------------------------
#endif
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2012, 21:16
Помогаю со студенческими работами здесь

Бинарное упорядоченное дерево
Всем привет. Никак не получается сделать программу с сайта(ссылка ниже). Делаю все, как указано, но после запуска активны только две...

Бинарное упорядоченное дерево
Здраствуйте! Так как я не очень понимаю програмирование прошу помощи. Бинарное упорядоченное дерево содержит англо-украинский...

Вставка в упорядоченное дерево
Промогите пожалуйста!!! Надо вставить элемент элемент в упорядоченное дерево. Дословно задание: Определите отношение tree_insert(X,...

Сбалансированное дерево
Дан массив из 15 чисел. Написать процедуру создания сбалансированного дерева.

Сбалансированное дерево
Всем привет!) Для учебной практики требуется решить задачу: Написать программу в С++, суть заключается в следующем, нужно на форме...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru