кто может помочь, есть такая задача
написать программу которая печатате все числа бинарного дерева,используемые больше одного раза. напечатать все узлы дерева, в состав которых не входит заданная цифра и уровни соответствующие таким узлам
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}
и к ней программа..
что нужно исправить, чтоб было такое задание:
написать программу,которая создает бинарное дерево, состоящее из целых чисел, вводимых с клавиатуры, печатает все числа бинарного дерева,используемые больше одного раза. напечатать все числа заданного дерева, в состав которых входит заданная цифра