Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

USES CRT;

TYPE

bintree=^el_bintree;

el_bintree=record

left,right:bintree;

inf:integer;

END;

Дії, які можна проводити з бінарними деревами:

ü Формування.

ü Перегляд.

ü Пошук.

ü Встановлення ширини та висоти дерева.

ü Встановлення кількості вузлових вершин, листків та напівисячих вершин.

ü Доповнення новим елементом (операція вставки перед (чи після) не має змісту, оскільки будь-який елемент у дереві розміщується в строго визначеному йому місці).

ü Вилучення елемента із дерева.

Враховуючи, що сама структура дерева має рекурсивний характер, то всі програми, що реалізують відповідні операції теж будуть рекурсивними підпрограмами. Згідно із описаним вище алгоритмом формування бінарного дерева, рекурсивна процедура, що здійснює це, може мати вигляд:

PROCEDURE ZAPUS (var p:bintree;a:integer);

BEGIN

New(p);

p^.left:=nil;

p^.right:=nil;

p^.inf:=a;

END;

PROCEDURE ROZM(var q:bintree;a:integer);

BEGIN

if q^.inf<a then

Begin

if q^.left<>nil then ROZM (q^.left,a)

else ZAPUS(q^.left,a);

End;

if q^.inf>a then

Begin

if q^.right<>nil then ROZM(q^.right,a)

else ZAPUS(q^.right,a);

End;

END;

PROCEDURE INPUT;

BEGIN

top:=nil;

writeln('введіть кількість елементів');

Readln(n);

for i:=1 to n do

Begin

writeln('введіть елемент:');

Readln(k);

if top=nil then ZAPUS(top,k)

Else ROZM(top,k);

End;

END;

Враховуючи рекурсивність структури і впорядкованість елементів, вивід їх на екран здійснюватиме теж рекурсивна процедура за порядком зростання, за алгоритмом:

ü Здійснюватиметься рух по дереву до крайнього лівого елемента (найменшого).

ü Це значення друкується.

ü Робиться один крок вправо і послідовність 1-3 повторюється відносно нової поточної вершини.

Програмна реалізація алгоритму друку має вигляд процедури:

PROCEDURE OUTPUT (p:bintree);

BEGIN

if p^.left<>nil then OUTPUT(p^.left);

write(p^.inf,' ');

if p^.right<>nil then OUTPUT(p^.right);

END;

Пошук елементу за вказаним значенням подібний до алгоритму виведення, при цьому замість процедури друку використовується порівняння інформаційних полів.

PROCEDURE FIND (p:bintree; x:integer);

BEGIN

Inc(i);

if p^.right<>nil then FIND(p^.right,x);

if p^.inf=x then

Begin

write('є під номером(ами) ');

Str(i,d);

s:=s+d;

End;

if p^.left<>nil then FIND(p^.left,x);

if (p=top) and (s='') then writeln('елемент не знайдено');

END;

Щоб визначити ширину дерева достатньо здійснити рекурсивний рух вліво і вправо до кінця відносно вершини із підрахунком кількості кроків, а потім додати.

PROCEDURE MOVE_RIGHT(p:bintree);

BEGIN

if p^.right<> nil then

Begin

k:=k+1;

MOVE_RIGHT(p^.right)

End;

END;

PROCEDURE MOVE_LEFT(p:bintree);

BEGIN

if p^.left<> nil then

Begin

k:=k+1;

MOVE_LEFT(p^.left)

End;

END;

В основній програмі це буде мати вигляд:

n:=0;

k:=0;




Дата добавления: 2015-09-11; просмотров: 21 | Поможем написать вашу работу | Нарушение авторских прав

Readln(name); | Очевидно, що значення параметру не повино перевищувати реальну довжину рядка. | Звичайно базовий тип множини в цьому випадку повинен бути допустимим для процедур вводу-виводу. | Close(f2); | Truncate(f); | Для доповнення текстового файлу використовують режим до запису. | Квартира з номером 34 у 13 будинку з номером 12. | Release(p); | Формування. | Readln(a); |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав