Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 53

Определить количество листьев, содержащих четные числа, в красно-чёрном дереве

01.04.2016, 17:54. Показов 1422. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить количество листьев в красно-чёрном дереве, содержащих четные числа. Помогите пожалуйста. (можно и в обычном, но лучше чёрно-красное)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.04.2016, 17:54
Ответы с готовыми решениями:

Поиск в красно-черном дереве
Доброе утро! Изучая, Стандарт выполняю задание - создайте шаблон ассоциативного контейнера. В общем он будет предельно прост, лишь с...

NIL в красно-черном дереве
В Кормене, алгоритм добавления содержит значение NIL, а в алгоритме удаление говорится о sentinal(NIL); class Node { Node *left; Node...

Алгоритм удаления узла в красно-черном дереве
Срочно задали написать алгоритм удаления узла красно-черного дерева(пока на словах!).Там мутоно,если удаляешь красный узел получается...

4
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
01.04.2016, 19:37
http://www.delphiplus.org/fund... revya.html
0
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 53
02.04.2016, 22:05  [ТС]
ZX Spectrum-128, пишет 404 Not Found
0
03.04.2016, 09:03

Не по теме:

Да вроде открывается.

0
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 53
04.04.2016, 14:05  [ТС]
да, открылось, но вот ясности это не дало... я в теории и так знаю что это, можно какой не будь пример реализации пожалуйста, как устроен Тайп, процедура печати, процедура создания дерева.

Добавлено через 14 часов 27 минут
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
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
program Project1;
 
 
uses
  SysUtils, Windows;
 
type
  //Основные данные узла дерева.
  TData = Integer;
  //Указатель на узел.
  TPNode = ^TNode;
  //Узел дерева.
  TNode = record
    Data : TData; //Основные данные узла дерева.
    PLeft, PRight : TPNode; //Указатель на левый и правый узел.
  end;
 
 
//Рекурсивная процедура для построения дерева через пользовательский ввод.
//Процедура добавляет дочерний узел к узлу aPNode.
//aPNode - указатель на родительский узел. Если родительского узла нет (при
//создании корня дерева), то aPNode = nil.
//aLr = 1 - создать левый узел, иначе (если aLr <> 1) - создать правый узел.
//aCode - код узла. Этот параметр предназначен для удобства ввода.
//aCode = '0' - корневой узел дерева;
//aCode = '0-1' - левый узел, связанный с корневым узлом.
//aCode = '0-2' - правый узел, связанный с корневым узлом.
//И т. д.
//                   0
//               /       \
//           0-1           0-2
//         /     \       /     \
//      0-1-1  0-1-2  0-2-1  0-2-2
//     /     \              /     \
// 0-1-1-1  0-1-1-2     0-2-2-1  0-2-2-2
procedure ReadNode(var aPNode : TPNode; const aLr : Integer; aCode : String);
var
  PNode : TPNode;
  Data : TData;
  Code : Integer;
  S : String;
begin
  //Определяем код узла.
  if aPNode = nil then
    aCode := '0'
  else
    aCode := aCode + '-' + IntToStr(aLr);
  //Ввод основных данных узла.
  Data := 0;
  repeat
    Write('Yzel ', aCode, '. Znach: ');
    Readln(S);
    Code := 0;
    if S <> '' then begin
      Val(S, Data, Code);
      if Code <> 0 then
        Writeln('Ne verii vvod.');
    end;
  until Code = 0;
  //Если пользователь выбрал отмену при создании узла, то выходим.
  if S = '' then begin
    Writeln('Otmena.');
    Exit;
  end;
 
  //Создаём узел, записываем в него данные и в зависимости от флага aLr
  //прикрепляем его к левой или к правой ветви родительского узла aPNode.
  New(PNode);
  PNode^.Data := Data;
  PNode^.PLeft := nil;
  PNode^.PRight := nil;
  if aPNode <> nil then begin
    if aLr = 1 then
      aPNode^.PLeft := PNode
    else
      aPNode^.PRight := PNode;
  end else
    aPNode := PNode;
  Writeln('Yzel sozdan');
 
  //Рекурсивный вызов для создания левого узла.
  ReadNode(PNode, 1, aCode);
  //Рекурсивный вызов для создания правого узла.
  ReadNode(PNode, 2, aCode);
end;
 
//Освобождение памяти, занятой деревом. (Удаление дерева).
procedure TreeFree(var aPNode : TPNode);
begin
  if aPNode = nil then Exit;
 
  if aPNode^.PLeft <> nil then TreeFree(aPNode^.PLeft);
  if aPNode^.PRight <> nil then TreeFree(aPNode^.PRight);
  Dispose(aPNode);
  aPNode := nil;
end;
 
//Рекурсивная функция для подсчёта узлов с заданным значением ключа.
function NumberOfLeaves(p: TPNode): integer;
var total: integer;
begin
  NumberOfLeaves := 1;
 
  total := 0;
  if (p^.PLeft= nil) and (p^.PRight = nil) then exit; { узел является "листом" }
 
  { считаем число листьев в левом поддереве }
  if p^.PLeft <> nil then inc(total, NumberOfLeaves(p^.PLeft));
  { считаем число листьев в правом поддереве }
  if p^.PRight <> nil then inc(total, NumberOfLeaves(p^.PRight));
 
  NumberOfLeaves := total;
  { и возвращаем общее количество листьев в дереве }
end;
 
 
 
var
  PTree : TPNode;
  Data : TData;
  Cmd, Code : Integer;
  S : String;
begin
  //Переключение окна консоли на кодовую страницу CP1251 (Win-1251).
  //Если после переключения русские буквы показываются неверно,
  //следует открыть системное меню консольного окна - щелчком мыши в левом
  //верхнем углу окна консоли и выбрать:
  //Свойства - закладка "Шрифт" - выбрать шрифт: "Lucida Console".
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
 
  //Начальная инициализация дерева.
  PTree := nil;
 
  repeat
    //Меню
    Writeln('Viberete deistvee:');
    Writeln('1: Sozdanie dereva.');
    Writeln('2: Proverka na pystoty.');
    Writeln('3: Ydalit derevo.');
    Writeln('4: Kol-vo listev.');
    Writeln('5: Vixod.');
    Write('Vvedite komandy: ');
    Readln(Cmd);
    case Cmd of
      1:
      begin
        Writeln('Vvjd dereva.');
        Writeln('chtoi otmenit nasmite Enter.');
        TreeFree(PTree);
        ReadNode(PTree, -1, '');
        Writeln('Derevo sozdano.')
      end;
      2:
        if PTree = nil then
          Writeln('Pystoe.')
        else
          Writeln('Ne pystoe.');
      3:
      begin
        TreeFree(PTree);
        Writeln('Derevo ydaleno.');
      end;
      4:
      begin
 
           repeat
         TreeFree(PTree);
      Val(S, Data, Code);
          if Code <> 0 then
        Writeln('Kol-vo listev: ', NumberOfLeaves(PTree));
        until Code = 0;
      end;
      5:
      begin
 
        TreeFree(PTree);
        Writeln('ochisheno.');
      end;
      else
        Writeln('Незарегистрированная команда. Повторите ввод.');
    end;
  until Cmd = 5;
 
  Writeln('Работа программы завершена. Для выхода нажмите Enter.');
  Readln;
end.
У меня получилось как-то так, но какие-то проблемы в функцией NumberOfLeaves, может кто поможет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2016, 14:05
Помогаю со студенческими работами здесь

Разработайте программы вставки и удаления элементов в красно-черном дереве
Двоичное дерево поиска называется красно-черным деревом,если оно обладает следующими свойствами: - каждая вершина либо красная, либо...

Создать класс дерева, содержащего числа. Реализовать в этом классе функцию, определяющую количество листьев в дереве
Нужно написать такую программку: Создать класс дерева, содержащего числа. Реализовать в этом классе функцию, определяющую количество...

Найти количество листьев в дереве
Здравствуйте, у меня вроде все получилось сделать, только, почему всегда ответ получается 0, как это можно исправить #include...

Количество листьев в бинарном дереве
Задача: Найти количество листьев в дереве. Собственно ввод и вывод дерева есть: #include &lt;iostream.h&gt; #include...

Вычислить количество листьев в бинарном дереве
вычислить количество листьев в бинарном дереве


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru