Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборник задач Бабалова.doc
Скачиваний:
95
Добавлен:
04.06.2015
Размер:
1.16 Mб
Скачать

Interface

type

pnode=^node;

node= record

key:integer;

left,right:pnode;

end;{один элемент двоичного дерева}

ttree= object {объект, для работы со структурой

данных типа дерева}

n: integer;{число узлов в дереве}

f,first:pnode;

constructor init;

destructor done(var t:pnode);

function create(m:integer):pnode;

procedure vivod(var t:pnode;m:integer);

procedure findel(var t:pnode;m:integer;ikey:integer);

procedure delel(var t:pnode;ikey:integer);

procedure addel(ikey:integer;var t:pnode);

end;

Implementation

uses crt;

constructor ttree.init;

begin

first:=nil;

n:=0;{создаем элемент пустого дерева}

end;

destructor ttree.done(var t:pnode);

begin

if t<>nil then

begin

with t^ do begin

done(left);

done(right);

end;

dispose(t);{Уничтожаем все дерево}

end;

end;

function ttree.create(m:integer):pnode;

Var newnode:pnode;

X,nl,nr:integer;

begin

n:=m;

if n=0 then

begin

create:=nil;

exit;

end;

nl:=n div 2;

nr:=n-nl-1;

{Создаем сбалансированное дерево}

new(newnode);

with newnode^ do begin

write('Введите очередное число ');

readln(key);

left:=create(nl);

right:=create(nr);

end;

create:=newnode;

end;

procedure ttree.vivod(var t:pnode;m:integer);

Var I: word;

begin

if t<> nil then {процедура вывода дерева

также рекурсивна, как и функция для его создания}

with t^ do begin

vivod(left,m+1);

for i:=1 to m do write('***');

writeln(key);

vivod(right,m+1);

end else

if m= 0 then

writeln('Дерева уже нет или еще нет!');

end;

procedure ttree.findel(var t:pnode; m:integer; ikey:integer);

begin

if t<> nil then

with t^ do begin

findel(left,m+1,ikey);

if key=ikey then

begin

writeln(' Элемент на ',m+1,'-ом уровне ');

writeln(ikey);

end;{Процедура поиска элемента в дереве

с определением уровня, на котором

находится найденный элемент}

findel(right,m+1,ikey);

end;

end;

procedure ttree.delel(var t:pnode;ikey:integer);