IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> бинарное дерево
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 43
Пол: Женский

Репутация: -  0  +


кто может помочь, есть такая задача
написать программу которая печатате все числа бинарного дерева,используемые больше одного раза. напечатать все узлы дерева, в состав которых не входит заданная цифра и уровни соответствующие таким узлам


Uses Crt;

Const {-------------------------}
{Форматы вывода числовых данных}
S = 4;
T = 1;
{-------------------------}
LTree = 4; {Размерность дерева, чем больше - тем большее дерево можно выводить на экран}
{Используется для вывода дерева}
{-------------------------}

Type
{-----------------------}
TNode=^TTree; {Узел бинарного дерева}
TTree = Record
Info : Integer; {Числов узле}
Left,Right : TNode; {Ссылки на сыновей}
End;
{-----------------------}
var
Number,ColN,k : Integer; {Число и счетчики}
Tr: TNode; {Ссылка на вершину списка}
St,St1: String; {Вспомогательные строки}
P : Boolean; {Флаг вхождения числа в список удаляемых}

{=============================================================}
Function NewTree( X : Integer) : TNode;
{Функция создания нового бинарного дерева}
Var P : TNode;
Begin
New(P);
P^.Info := X;
P^.Left := Nil;
P^.Right := Nil;
NewTree := P;
End; {NewTree}
{-----------------------}
Procedure AddTree(Var Tr:TNode; X : Integer);
{Добавление в дерево по условию задачи}
Begin
If Tr = Nil Then Tr := NewTree(X)
Else
If(Tr^.Info = X) Then {Дубликаты запихиваем в правое поддерево}
AddTree(Tr^.Right,X) {Добавление в правое поддерево}
Else AddTree(Tr^.Left,X) {Добавление в левое поддерево}
End; {AddTree}
{---------------------------------------}
Procedure Find(Tr:TNode);
{Поиск чисел встречающихся неоднократно}
Begin
If Tr <> Nil Then
Begin
If Tr^.Right <> Nil Then Write(Tr^.Info: 3);
Find(Tr^.Left);
End;
End; {Find}
{---------------------------------------}
Procedure FindLevel(Tr:TNode; Level : Integer);
{Ищет узлы в которых нет заданного числа}
Begin
If Tr <> Nil Then
Begin
Inc(Level); {Увеличение уровня}
If Tr^.Info <> Number Then {Вывод найденного узла}
Writeln('Узел c цифрой = ', Tr^.Info, ' на уровне ', Level);
FindLevel(Tr^.Left,Level);
FindLevel(Tr^.Right,Level);
End;
End; {FindLevel}
{----------------------------}
Procedure PrintTree2(Tr:TNode; TecX,TecY,N,k: Integer);
{Второй вариант распечатки дерева (Крутой)}
Var P : Integer;
Begin
If Tr<>Nil then
Begin
If N < LTree Then Begin N := LTree; P := 1 End
Else P := 0;
If k = 0 Then Begin GotoXY(abs(TecX - (N div 2))+1,TecY-1); Write('\'); End;
If k = 1 Then Begin GotoXY(TecX + (N div 2) + S-1,TecY-1); Write('/'); End;
GotoXY(TecX,TecY); Write(Tr^.Info:3);
PrintTree2(Tr^.Left,TecX - N,TecY+2,N-LTree,1);
PrintTree2(Tr^.Right,TecX + N,TecY+2,N-LTree,0);
End;
End; {PrintTree2}
{=============================================}
Begin
ClrScr;
{----------------------------}
{Инициализация данных и добавление их в дерево}
Tr:=Nil; ColN := 0;
Writeln('Введите массив чисел (Вводи любого символа - КОНЕЦ): ');
While k = 0 do
Begin
Write('Введите ', ColN + 1, '-е число : ');
Readln(St);
Val(St,Number,k);

If k = 0 Then
Begin St1 := St1 +' ' + St; AddTree(Tr,Number); Inc(ColN); End;
End;
{----------------------------}
Writeln;
ClrScr;
Writeln('Исходный массив чисел :');
Writeln(St1); {Выводим на экран введенную строку чисел}
Writeln('---------------------------------------------------------');
Write('Введите число для проверки условия: '); Readln(Number);
Writeln('---------------------------------------------------------');
Writeln('Полученное дерево с дубликатами :');
PrintTree2(Tr,WhereX+45,WhereY,ColN-2,3); {Распечатка дерева}
Readkey;
ClrScr;
Writeln('---------------------------------------------------------');
Write('Числа используемые больше одного раза: ');
Find(Tr); Writeln; {Ищем числа использованные больше одного раза}
Writeln('---------------------------------------------------------');
Writeln('Узлы дерева, в состав которых не входит цифра ', Number,' :');
FindLevel(Tr,0); {Ищем узлы, в которых нет заданного числа}
Writeln('---------------------------------------------------------');
Write('Нажмите клавишу ...');
Readkey;
End. {Program End}
и к ней программа..
что нужно исправить, чтоб было такое задание:
написать программу,которая создает бинарное дерево, состоящее из целых чисел, вводимых с клавиатуры, печатает все числа бинарного дерева,используемые больше одного раза. напечатать все числа заданного дерева, в состав которых входит заданная цифра
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.12.2024 20:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name