Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Pascal Матрица из сторон треугольника https://www.cyberforum.ru/ pascal/ thread74615.html
Дан массив,а именно таблица А, которая содержит N троек вещественных чисел.Т.е. получается N строк,три столбца.Составить линейную таблицу, элемент которой равен 1, если соответствующая строка состоит...
Pascal Найти минимальный положительный и максимальный отрицательный из данных десяти элементов
Помогите плиз решить задачу!!! Найти | из данных десяти элементов. Если требуемые элементы отсутствуют, то вывести 0.
Pascal Блок-схема
построить блок-схему к этой програме: program p; uses crt; const m = 3; var A:array of byte; B:array of boolean; i,j,k:byte; begin clrscr; for i:=1 to m do
Pascal База Данных (не запускаеться прога) Есть программа по работе с БД Вывод, добавление записи, удаление записи, сортировка и поиск Но проблема в том, что программа не запускается, и я не могу понять почему :( Написано все вроде... https://www.cyberforum.ru/ pascal/ thread74601.html
Pascal Распечатать список студентов, дни рождения которых весной https://www.cyberforum.ru/ pascal/ thread74600.html
Распечатать список студентов, дни рождения которых весной.
Pascal передача параметра в процедуру
добрый вечер. подскажите кому не лень, 1- как правильно передать в процедуру массив(не изменив его по завершению процедуры и второй вариант чтобы изменения сохранились) с массивом так же нужно...
Процедуры (вывести столбцы м-цы с нулевыми значениями) Pascal
Следующая задача: Сформировать и вывести на экран две матрицы путем ввода элементов с клавиатуры и по заданному правилу, используя процедуры пользователя. Фактическое число строк и столбцов вводить...
Pascal Связный (линейный) список Люди , помогите плиз!!!!!!!!!!!!!!!!!! не могу решить задачу на список. может кто-нидь подскажет что делать с ней. Вот задача: Написать программу, содержащую подпрограмму, которая копирует в... https://www.cyberforum.ru/ pascal/ thread74588.html
Pascal В заданном тексте определить целое число, состоящее из наибольшего количества цифр. https://www.cyberforum.ru/ pascal/ thread74587.html
Здравствуйте, я новичёк на вашем форуме. Пожалуйста, помогите написать следующие программы. 1 программко - Строки. В заданном тексте определить целое число, состоящее из наибольшего количества...
Pascal Очередь- как разобраться!!!!! Помогите пожалуйста решить задачу с помошью очереди: Найдите среди четерёх очередей две одинаковые. Я начала писать а что дальше не знаю(((( {тут описан ввод очередей, а как найти... https://www.cyberforum.ru/ pascal/ thread74585.html
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
24.12.2009, 10:43 0

Определить количество узлов на каждом уровне данного бинарного дерева

24.12.2009, 10:43. Просмотров 6114. Ответов 4
Метки (Все метки)

Ответ

Pascal
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
program B_Tree;
type PTree = ^ TTree; {Tip- ukazatel na element dereva}
     TTree = record el: integer; {tip el-ta dereva}
                    left, right: PTree; {ukazateli na lev i prav.sina}
             end;
 
     { type el-tov steka - informacija - eto ukazatel na el-t dereva, pred - uk-l na predidush. el-t }
     PStek= ^TStek;
     TStek= record Inf:  PTree;
                   pred: PStek;
             end;
 
 
var  Tree {ukaz. na koren dereva}, p, pr: PTree;
     elTree: integer;
 
     i,j: integer;
     c: char;
 
 {===================Stack ================================================}
 procedure InitStek(var top: PStek); { инициализация стека }
 begin top := nil;
 end;
 
 {proverka Steka na pustoty. true esli pusto }
 function PustStek(top: PStek): boolean;  
 begin PustStek := top = nil;
 end;
 
 procedure InStek(el: Ptree;  var top: PStek ); { добавление в стек эл-та со значением el }
 var p: PStek ;
 begin new(p); { выделили память под новый элемент }
       p^.inf := el;
       p^.pred := top; { указатель на предыдущий элемент берем из указателя на посл элемент стека }
       top := p; { теперь новый элемент стал посл. элементом стека, на него и будет указывать top}
  end;
 
  procedure OutStek(var el: PTree;  var top: PStek); {убираем из непустого стека посл элемент}
  var p: PStek;
  begin el := top^.inf; { запомнили значение эл-та }
        p  := top;     { запомнили ссылку на эл-т}
        top := top^.pred; {теперь уже ссылаемся на предпоследний эл-т стека}
        dispose(p);   {освобождаем память, бывшую под удаляемым эл-том }
  end ;
 
 
{===============Be-derevo ===========================================}
 {ini******acija dereva } 
 procedure InitTree(var tree:PTree);
 begin 
   tree := nil;  
 end; 
 
 {proverka dereva na pustoty. true esli pusto }
 function PustTree(tree:PTree): boolean;  
 begin PustTree := tree = nil;  
 end; 
 
 {-------------------------------------------------------------------}
 {dobavlenie v derevo }
 procedure AddInTree(el: integer; var tree:PTree);
 var p, pr, t: PTree;
 begin new(t); t^.el := el; {sozdaem novii el-t dereva}
       t^.left := nil; t^.right := nil; {nov.el-t bydet listom dereva}
       p:= tree; pr:=nil;
       {ishem mesto privjazki }
       while p<>nil do
       begin pr := p; {"predidushii" ukazatel}
 
             if p^.el > el then p:=P^.left
             else p:=p^.right;
       end;
       if tree = nil then tree := t {pervii uzel dereva}
       else if pr^.el>el then pr^.left := t
            else pr^.right := t;
 
 end;
 {--------------------------------------------------------------------}
 { Prjamoi obxod (pechat) dereva - uzel, levoe podderevo, pravoe podderevo - rekursuja }
 procedure PrintTree(tree: PTree);
 begin write(tree^.el, ' ');
       if tree^.left<>nil then PrintTree(tree^.left);
       if tree^.right<>nil then PrintTree(tree^.right);
 end;
 {------------------------------------------------------------------------}
 {Udalenie dereva}
 procedure ClearTree(var p:Ptree);
 begin if p^.left <> nil then ClearTree(p^.left);
       if p^.right <>nil then ClearTree(p^.right);
       dispose(p); p:=nil;
 end;
 
 { obxod dereva po urovnjam s pechatju kol-va el-tov na kazdom urovne }
 procedure ObxodPoUrovn(tree:Ptree);
 var elStek: PTree;
     top1, top2: PStek; { ukaz. na verchini vspomog. stackov }
     Uroven, Kol : integer;
 begin
 
     InitStek(top1); InitStek(top2);
 
     InStek(tree, top1); {взять корень, положить в стек1. }
 
     Uroven := 0;
 
     repeat {повторить }
 
       { увеличить уровень на 1, обнулить кол-во эл-тов на переходе к следующему уровню.}
       Kol := 0;
       Uroven := Uroven +1;
 
       writeln('Elementi ', Uroven,' yrovnja:');
 
 
       while not PustStek(top1) do {пока стек1 не пуст}
{ вынуть очередной элемент, увеличить кол-во на очередном уровне, положить его во 2 стек}
       begin OutStek(elStek, top1);
             kol := kol + 1;
             write(elStek^.el,' ');
             InStek(elStek, top2);
       end;
       writeln;
       writeln('Kol-vo elementov ', Uroven,' yrovnja:', kol);
 
       while not PustStek(top2) do {пока стек2 не пуст}
{ вынуть из него очередной элемент, положить в стек1 правого и левого сына этого эл-та.}
       begin OutStek(elStek, top2);
 
             if elStek^.right<>nil then
                    InStek(elStek^.right, top1);
 
             if elStek^.left<>nil then
                    InStek(elStek^.left,  top1);
       end;
 
     until PustStek(top1); {пока стек1 не будет пуст }
 end;
 
 {===================Osn programma ========================================}
begin
  InitTree(tree);
 
  writeln('Sozdanie dereva: ');
  repeat
    write('element dereva = ');
    readln(elTree);
    AddInTree(elTree, tree);
    write('Prodolzhit vvod (Y/N)?'); readln(c);
  until (c = 'N') or (c = 'n');
 
  if not PustTree(tree) then
  begin writeln('Obxod dereva (prjamoi):');
        PrintTree(tree);
 
        writeln;
        write('Nazmite ENTER...'); readln; 
 
        writeln('Podshet uzlov po urovnjam: ');
        ObxodPoUrovn(tree);
 
        ClearTree(tree);
  end;
  write('Nazmite ENTER...'); readln; 
end.


Вернуться к обсуждению:
Определить количество узлов на каждом уровне данного бинарного дерева
2
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2009, 10:43
Готовые ответы и решения:

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

Определить количество вершин на к-уровне дерева
Дан указатель на корень дерева и натуральное число К. Определить количество вершин на к-уровне....

Определить количество листьев на каждом уровне дерева итеративным способом
Здравствуйте, необходима помощь. Необходимо написать процедуру, определяющую количество листьев на...

Определить число узлов на каждом уровне дерева
Помогите пожалуйста, нужно определить число узлов на каждом уровне дерева. За ранее спасибо.

4
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.