Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 06.07.2018
Сообщений: 31
1

Разработать класс или структуру «Бинарное дерево»

06.11.2018, 20:03. Показов 567. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не понимаю в чем ошибка,надеюсь вы увидите и скажите почему сборка.
Задание вот:
Разработать класс или структуру «Бинарное дерево».
Предусмотреть следующие возможности:
1. Дерево хранит целочисленные значения
2. Добавление элемента в дерево (если такой элемент существует, то его
отбрасываем)
3. Удаление элемента из дерева
4. Отображение дерева
5. Методы обхода дерева
6. Подсчет количества узлов дерева
7. Подсчет количества листьев
Реализовать WPF приложение со следующими возможностями:
1. Добавление элементов в дерево по одному.
2. Генерация дерева с 5000 узлами. В качестве корня использовать узел со значением
10000.
Код:
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
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Serialization; //возможность сериализации 
using System.Diagnostics;
using System.Threading; //потоки
 
namespace Lab4Derevo
{
    class Vetochka
    {
        public int chislo;
        public Vetochka left;
        public Vetochka right;
 
        public Vetochka (int num)
        {
            chislo = num;
            left = null;
            right = null;
        }
        public Vetochka()
        {
        }
    }
    
 
    public partial class MainWindow : Window
    {
        class Vetochka
    {
        public int chislo;
        public Vetochka left;
        public Vetochka right;
 
        public Vetochka (int num)
        {
            chislo = num;
            left = null;
            right = null;
        }
        public Vetochka()
        {
        }
    }
        class ClassDerevo
    {
        public Vetochka root; //главный корень
        public string obxody = "";
 
        public ClassDerevo()
        {
 
        }
 
        public TreeViewItem pokaz(TreeViewItem glavnoe, Vetochka tekyshee)
        {
            glavnoe.Header = tekyshee.chislo; //добавляем значение в главное окно
            glavnoe.IsExpanded = true; // чтобы сразу раскрывалось
 
            if (tekyshee.left != null)
            {
                TreeViewItem levoe = new TreeViewItem();
                glavnoe.Items.Add(pokaz(levoe, tekyshee.left));
            }
            if (tekyshee.right != null)
            {
                TreeViewItem pravoe = new TreeViewItem();
                glavnoe.Items.Add(pokaz(pravoe, tekyshee.right));
            }
            return glavnoe;
        }
 
        public int List(Vetochka tekyshee, int count) //подсчет количества листьев
        {
            if (tekyshee.right == null && tekyshee.left == null)
            {
                count++;
            }
            if (tekyshee.left != null)
            {
                count = List(tekyshee.left, count);
            }
            if (tekyshee.right != null)
            {
                count = List(tekyshee.right, count);
            }
 
            return count;
        }
        public int Uzel(Vetochka tekyshee, int count) //подсчет количества узлов
        {
            if (tekyshee.left != null)
            {
                count = Uzel(tekyshee.left, ++count);
            }
            if (tekyshee.right != null)
            {
                count = Uzel(tekyshee.right, ++count);
            }
            return count;
        }
 
        public void Add(int chislo, Vetochka tekysheee) //добавление
        {
            if (tekysheee.chislo > chislo)
            {
                if (tekysheee.left == null)
                {
                    Vetochka newUzel = new Vetochka(chislo);
                    tekysheee.left = newUzel;
                }
                else
                {
 
                    Add(chislo, tekysheee.left);
                }
            }
            else
            {
                if (tekysheee.chislo < chislo)
                {
                    if (tekysheee.right == null)
                    {
                        Vetochka newUzel = new Vetochka(chislo);
                        tekysheee.right = newUzel;
                    }
                    else
                    {
                        Add(chislo, tekysheee.right);
                    }
                }
            }
        }
 
        public void Remove(int chislo, Vetochka glavnoe, bool leftDel, Vetochka tekyshee) //удаление
        {
            if (tekyshee != null)
            {
                if (chislo > tekyshee.chislo)
                {
                    glavnoe = tekyshee;
                    Remove(chislo, glavnoe, false, tekyshee.right);
                }
                else if (chislo < tekyshee.chislo)
                {
                    glavnoe = tekyshee;
                    Remove(chislo, glavnoe, true, tekyshee.left);
                }
                else
                {
                    if (tekyshee.left == null && tekyshee.right == null)
                    {
                        if (glavnoe == null)
                        {
                            tekyshee.chislo = -1;
                        }
                        else
                        {
                            if (leftDel)
                                glavnoe.left = null;
                            else
                                glavnoe.right = null;
                        }
                    }
                    else
                    {
                        if (tekyshee.right != null)
                        {
                            if (tekyshee.right.left == null)
                            {
                                tekyshee.chislo = tekyshee.right.chislo;
                                tekyshee.right = tekyshee.right.right;
                            }
                            else
                            {
                                glavnoe = Delete(tekyshee.right.left, tekyshee.right);
                                tekyshee.chislo = glavnoe.left.chislo;
                                glavnoe.left = null;
                            }
                        }
                        else
                        {
                            if (tekyshee.left.right == null)
                            {
                                tekyshee.chislo = tekyshee.left.chislo;
                                tekyshee.left = tekyshee.left.left;
                            }
                            else
                            {
                                glavnoe = Delete(tekyshee.left.right, tekyshee.left);
                                tekyshee.chislo = glavnoe.right.chislo;
                                glavnoe.right = null;
                            }
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Такого числа не существует!");
            }
        }
 
        internal void Obhod3(Vetochka root, ref object r, bool v)
        {
            throw new NotImplementedException();
        }
 
        public Vetochka Delete(Vetochka udalelement, Vetochka glavnoe)
        {
            if (udalelement.left != null)
            {
                glavnoe = udalelement;
                return Delete(udalelement.left, glavnoe);
            }
            else
            {
                return glavnoe;
            }
        }
        public void Obhod1(Vetochka ob1, ref string o, bool current) //прямой обход
        {
 
            o += ob1.chislo + " ";
            if (ob1.left != null)
            {
                if (current)
                    Obhod1(ob1.left, ref o, current);
            }
 
            if (ob1.right != null)
            {
                if (current)
                    Obhod1(ob1.right, ref o, current);
            }
 
        }
 
 
         public void Obhod2(Vetochka ob2, ref string s, bool current) //симметричный обход
         {
 
             if (ob2.left != null)
             {
                 if (current)
                     Obhod2(ob2.left, ref s, current);
             }
             s += ob2.chislo + " ";
             if (ob2.right != null)
             {
                 if (current)
                     Obhod2(ob2.right, ref s, current);
             }
 
         }
 
        public void Obhod3(Vetochka ob3, ref string r, bool current) //обратный обход
        {
 
            
            if (ob3.left != null)
            {
                if (current)
                    Obhod1(ob3.left, ref r, current);
            }
 
            if (ob3.right != null)
            {
                if (current)
                    Obhod1(ob3.right, ref r, current);
            }
 
            r += ob3.chislo + " ";
        }
 
    }
 
 
        ClassDerevo Tree = new ClassDerevo();
 
        public string d = "";
        private string o;
        private string s;
        private string r;
 
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void dobavit_Click(object sender, RoutedEventArgs e)
        {
            string s = znachenie.Text;
 
            if (s.Length > 0)
            {
                int k = Convert.ToInt32(s);
                if (Tree.root == null)
                {
                    Tree.root = new Vetochka(k);
                }
                else
                {
                    Tree.Add(k, Tree.root);
                }
 
                pokazdereva.Items.Clear();
 
                TreeViewItem treeitem = new TreeViewItem();
                pokazdereva.Items.Add(Tree.pokaz(treeitem, Tree.root));
 
                znachenie.Clear();
            }
            else
            {
                MessageBox.Show("Проверьте введеные данные");
            }
 
        }
 
        private void znachenie_GotFocus(object sender, RoutedEventArgs e)
        {
            znachenie.Clear();
        }
 
        private void udalit_Click(object sender, RoutedEventArgs e)
        {
            string s = znachenie.Text;
            if (s.Length > 0)
            {
                int k = Convert.ToInt32(s);
                Tree.Remove(k, null, true, Tree.root);
                if (Tree.root.chislo == -1)
                {
                    Tree.root = null;
                }
                pokazdereva.Items.Clear();
                TreeViewItem treeitem = new TreeViewItem();
                pokazdereva.Items.Add(Tree.pokaz(treeitem, Tree.root));
                znachenie.Clear();
            }
            else
            {
                MessageBox.Show("Проверьте введенные данные");
            }
        }
 
 
        private void b_list_Click(object sender, RoutedEventArgs e)
        {
            list.Text = Convert.ToString(Tree.List(Tree.root, 0));
        }
 
        private void b_uzel_Click(object sender, RoutedEventArgs e)
        {
            uzel.Text = Convert.ToString(Tree.Uzel(Tree.root, 1));
        }
 
        private void general_Click(object sender, RoutedEventArgs e)
        {
            pokazdereva.Items.Clear();
 
            Random rnd = new Random();
 
            int Count = 1;
 
            if (Tree.root == null)
            {
                Tree.root = new Vetochka(10000);
            }
 
            while (Count <= 5000)
            {
                Tree.Add(rnd.Next(0, 20000), Tree.root);
 
                Count++;
            }
 
            TreeViewItem treeItem = new TreeViewItem();
            pokazdereva.Items.Add(Tree.pokaz(treeItem, Tree.root));
        }
 
         void pr_Click(object sender, RoutedEventArgs e)
        {
            pokaz_obhoda.Clear();
            Tree.Obhod1(Tree.root, ref o, true);
            pokaz_obhoda.Text += o;
        }
 
        private void simm_Click(object sender, RoutedEventArgs e)
        {
            pokaz_obhoda.Clear();
            Tree.Obhod2(Tree.root, ref s, true);
            pokaz_obhoda.Text += s;
        }
 
        private void obr_Click(object sender, RoutedEventArgs e)
        {
            pokaz_obhoda.Clear();
            Tree.Obhod3(Tree.root, ref r, true);
            pokaz_obhoda.Text += r;
        }
 
 
        private void clear_Click(object sender, RoutedEventArgs e)
        {
            znachenie.Clear();
            pokazdereva.Items.Clear();
            pokaz_obhoda.Clear();
        }
    }
}
XML
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
<Window x:Class="Lab4Derevo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Lab4Derevo"
        mc:Ignorable="d"
        Title="Tree" Height="450" Width="800" Background="LightPink">
    <Grid>
        <Label Content="Поле ввода:" Margin="0,0,685,386" HorizontalContentAlignment="Center"></Label>
        <TextBox Name="znachenie" Margin="10,33,646,353" GotFocus="znachenie_GotFocus"></TextBox>
        <Button Margin="151,33,577,353" Name="dobavit" Content="Добавить" Background="Green" Click="dobavit_Click" ></Button>
        <Button Margin="220,33,514,353" Name="udalit" Content="Удалить" Background="Red" Click="udalit_Click"></Button>
        <Button Margin="10,71,646,311" Name="general" Content="Сгенерировать дерево" Background="MediumPurple" Click="general_Click" ></Button>
        <Button Margin="10,134,709,252" Content="Листья" Background="MediumAquamarine" Name="b_list" Click="b_list_Click"></Button>
        <Button Margin="10,172,709,214" Content="Узлы" Background="LightGreen" Name="b_uzel" Click="b_uzel_Click"></Button>
        <TextBox Name="list" IsReadOnly="True" Margin="88,134,577,252"></TextBox>
        <TextBox Name="uzel" IsReadOnly="True" Margin="88,172,577,214"></TextBox>
        <Label Content="Методы обхода:" Margin="10,210,665,178"></Label>
        <Button Margin="10,241,577,145" Content="Прямой" Background="LightBlue" Name="pr" Click="pr_Click"></Button>
        <Button Margin="10,279,577,107" Content="Симметричный" Background="PaleVioletRed" Name="simm" Click="simm_Click" ></Button>
        <Button Margin="10,317,577,69" Content="Обратный" Background="PaleGoldenrod" Name="obr" Click="obr_Click"></Button>
        <Button Margin="10,376,577,10" Content="Очистить всё" Background="Silver" Name="clear" Click="clear_Click"></Button>
        <TreeView
            Height="190"
            Width="462"
            HorizontalAlignment="Left"
            VerticalAlignment="Bottom"
            Margin="298,0,0,196"
            Name="pokazdereva" >
            </TreeView>
        <TextBox Margin="298,241,32,10" Name="pokaz_obhoda" IsReadOnly="True"></TextBox>
    </Grid>
</Window>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2018, 20:03
Ответы с готовыми решениями:

Разработать класс или структуру «Бинарное дерево»
Лабораторная работа «Дерево». Цель работы: отработать навыки работы со структурой данных «Дерево»....

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при...

Бинарное дерево. Ссылка на структуру
Строю бинарное дерево. Узлы - структуры. Сортировка будет по номеру рейса. Как сделать ссылку на...

Требуется реализовать структуру данных «ассоциативный массив» используя бинарное дерево
Приведите,пожалуйста,примеры подобных программ

0
06.11.2018, 20:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2018, 20:03
Помогаю со студенческими работами здесь

Разработать программу, которая создает бинарное дерево
Разработать программу, которая создает бинарное дерево T, элементами которого являются...

Бинарное дерево поиска. Разработать функцию удаления
Здравствуйте! Помогите пожалуйста! Имеется связной список, который содержит целые числа. Нужно...

Разработать программу, которая создает бинарное дерево
не могу написать программу, помогите кто знает. Условие: Разработать программу, которая создает...

Класс бинарное дерево
Всем привет. Только начинаю разбираться с с# и с программированием. Если не сложно подскажите, как ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru