Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 4
Регистрация: 08.06.2011
Сообщений: 25
1

Задача: Построить двоичное дерево, элементами которого являются числа.

10.06.2011, 21:24. Просмотров 2089. Ответов 2
Метки нет (Все метки)

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
165
166
Program bin_tree;
    {
       Задача.
         Построить двоичное дерево, элементами которого являются
         числа.
    }
 
    Uses Crt;
 
    Const
      A { данный массив-константа }
      : array [1..12] of integer
      = (70, 60, 85, 87, 90, 45, 30, 88, 35, 20, 86, 82);
 
    Type
      zap = ^element;
      element = record
                  n { число из массива }
                  : integer;
                  lev, { адрес левой ветки }
                  prav { адрес правой ветки }
                  : zap;
               end;
 
    Var
      i { номер элемента массива }
      : integer;
      tek_v, { текущая вершина дерева }
      lev_v, { левая вершина дерева }
      prav_v, { правая вершина дерева }
      root_v, { корень дерева }
      pred_v, { вершина предыдущая }
      new_v { новая, только что порожденная вершина с помощью               New }
      : zap;
 
    Procedure sozd_dereva (
                            k { число-ключ - значение
                                  вершины дерева }
                            : integer
                          );
    {
      LEV, 9.06.11, 14:50,
      Алгоритм построения дерева
    }
    var
      key { ключ - значение вершины дерева }
      : integer;
    begin
      {
        если дерево еще не построено, то создаем корень дерева
      }
      if tek_v = nil
        then
          begin
            New (tek_v);
            tek_v^.n := k;
            tek_v^.lev := nil;
            tek_v^.prav := nil;
            root_v := tek_v;
            pred_v := tek_v;
            Exit;
          end;
      {
        добавление следующих вершин дерева
      }
      {
        поля новой вершины
      }
      New (new_v);
      new_v^.n := k;
      new_v^.lev := nil;
      new_v^.prav := nil;
 
      {
         будем двигаться вниз по дереву, влево или вправо и            сравнивать key с k.
         Цикл закончим тогда, когда придем на вершину, значение        которой nil.
          }
      tek_v := root_v;
      key := root_v^.n; { значение корня дерева }
      while tek_v <> nil do
        begin
          {I. }
          if (k <= key)
            then
              if (tek_v^.lev = nil)
                then
                  begin
                    { записываем адрес новой вершины
                      в текущую левую ветку }
                    tek_v^.lev := new_v;
                    WriteLn ('прошла установка ', k, ' налево,                             после ', tek_v^.n);
                    Break;
                 end
                else
                  begin
                    tek_v := tek_v^.lev;
                    key := tek_v^.n;
                    Continue;
                  end;
          {II. }
          if (k > key)
            then
              if (tek_v^.prav = nil)
                then
                  begin
                    { записываем адрес новой вершины
                    в текущую правую ветку }
                    tek_v^.prav := new_v;
                    WriteLn ('прошла установка ', k, ' направо,                       после ', tek_v^.n);
                    Break;
                  end
                else
                  begin
                    tek_v := tek_v^.prav;
                    key := tek_v^.n
                  end;
 
        end; { end while, конец поиска nil }
    end; { end sozd_dereva окончание построения дерева }
 
 
    Procedure del_tree (
                         p { адрес узла дерева }
                         : zap
                       );
    {
      LEV, 9.06.11, 14:55,
      Уничтожение дерева
    }
    begin
      if p <> nil
        then
          begin
            del_tree (p^.lev);
            del_tree (p^.prav);
            Dispose (p);
          end;
    end;
 
 
    Begin
      ClrScr;
 
      {
        Двоичное дерево еще не построено
      }
      tek_v := nil;
 
      WriteLn ('Построим двоичное дерево.');
      WriteLn;
      for i := 1 to 12 do
        begin
          sozd_dereva (A [i]);
        end;
      WriteLn;
      WriteLn ('Двоичное дерево построено.');
 
      {
        Уничтожим дерево (отдадим память назад OS)
      }
      del_tree (root_v);
      WriteLn;
      WriteLn ('Двоичное дерево уничтожено.');
 
      ReadLn;
    End.
кому помогла задача ставим "+", потихоньку выложу все свои решения.....
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2011, 21:24
Ответы с готовыми решениями:

построить и напечатать множество, элементами которого являются встречающиеся в последовательности: цифры от '0' до '9'
Дана непустая последовательность символов. Требуется построить и напе- чатать множество, элементами...

Построить и распечатать множество с элементами, символом которого являются буквы от t до x и знаки препинания
Вводим произвольный набор символов с клавиатуры требуется построить и распечатать множество с...

Требуется построить и распечатать множество, элементами которого являются встречающиеся в последовательности цифры от '0' до '3' и буквы 'A'..'F'
Дана непустая последовательность символов. Требуется построить и распечатать множество, элементами...

Cформировать массив, элементами которого являются цифры числа N
Дано натуральное число N. Составьте программу формирования массива, элементами которого являются...

2
382 / 330 / 159
Регистрация: 06.12.2010
Сообщений: 894
10.06.2011, 21:44 2
MiBr, что вам эти "+" дают?)
0
1 / 1 / 4
Регистрация: 08.06.2011
Сообщений: 25
10.06.2011, 22:19  [ТС] 3
просто хочется) и буду знать кому хоть помог)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2011, 22:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сформировать массив, элементами которого являются цифры числа N
Народ помогите пожалуйста решить контрольную работу..... Она состоит из 7 вопросов...4 я...

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

Даны натуральные числа К и N. Составить программу формирования массива A, элементами которого являются числа, сумма цифр которых равна K и которые не
вот собственно задача: Даны натуральные числа К и N. Составить программу формирования массива A,...

В существующем файле, элементами которого являются числа, изменить на заданное число
В существующем файле, элементами которого являются числа, изменить на заданное число: а) первый...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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