Professional Documents
Culture Documents
ASP - 08 - Hirearhiski Strukturi Drva
ASP - 08 - Hirearhiski Strukturi Drva
– белешки од предавања –
8. Дрва
8.1 Комплексни листи
Динамичките структури што беа прикажани во предходните поглавја описно
можеа да се опишат со аналогијата на синџири. Имено имавме информација која
беше поврзана со друга информација во секвенцијален распоред. Иако
информацијата можеше да биде било каков запис, поради нивната
секвенцијалност (последователност) обично се вели дека таквите податочни
структури се едноставни динамички податочни структури.
Од примерот се гледа дека кон еден јазел може да се придружи комплетно нова
листа. Иако се добива релативно комплексна структура, треба да се укаже на
фактот дека во овој пример (поради неговата природа) кон еден јазел покажува
само една врска, односно постои некаква хиерархија. Речиси секоја општествена
организација тргнувајќи од мало претпријатие па до државата подлежи на
хиерархиска организација. Структурите во компјутерската техника се многу
често хиерархиски: базите на податоци, синтаксичките структури во
програмските јазици, формулите итн.
1
Постојат и уште покомплексни структури кои дозволуваат повеќе врски да
покажуваат (односно да делат) еден јазел. Примери за такви структури се
дадени на слика 8.2. Овие структури би можеле да се искористат за моделирање
на електронски книги или веб страници кои дозволуваат користење на така
наречени хиперврски (hyperlinks).
2
слика 8.3 Илустрација на операцијата изминување на
комплексна листа
3
е дефинирана релацијата ,,е родител”. Во секој од јазлите на дрвото може да се
сместат податоци од кој било податочен тип.
Коренот на секое дрво е единствен јазел во дрвото што нема родител. Јазел кој
има барем еден наследник се нарекува нетерминален (внатрешен) јазел. Ако
еден јазел нема наследници, тогаш истиот се нарекува терминален јазел или
лист.
Дрво е конечно множество Т со еден или повеќе елементи наречени јазли што
ги задоволува следниве правила:
Јазел што има најмалку едно дете се нарекува нетерминален или внатрешен
јазел. Нивото на секој јазел е бројот на поддрва преку кои се доаѓа до него,
односно бројот на јазли низ кои треба да се помине за од коренот да се стигне
до јазелот, имајќи предвид дека нивото на коренот е 0. Стандардната
терминологија за јазлите во дрвата е земена од фамилијарните дрва. Така, секој
корен е татко (или родител). Јазлите непосредно под таткото се негови деца
(понекогаш се користат и термините синови или ќерки), а меѓу себе се браќа
(сестри). Некои автори ги користат термините наследници и следбеници за да го
претстават односот на родителство.
5
слика 8.6. Дрво
Ако n1, n2, …, nk е низа на јазли во дрво така да ni е родител на ni+1, 1 ≤i < n,
тогаш низата се нарекува патека од јазелот n1 до nk. За слика 8.6, патеката од
јазелот A до м гласи: A, Б, Д, м.
Должина на патека претставува број на врски меѓу два јазла, односно таа е за
еден помала од бројот на јазли во патеката. Должина на патека од еден јазел до
самиот себе изнесува 0.
6
Висина на јазел во дрво е должината на најдолгата патека од јазелот до
листовите. Висина на дрвото е висина на коренот на дрвото. Длабочина на јазел
е должината на единствената патека од коренот до јазелот. Длабочина на дрво е
дефинирана со максималната длабочина на било кој јазел од дрвото.
7
Ова претставување на дрвата се нарекува претставување со помош на бинарни
дрва. Бинарното дрво е погодно за најголемиот дел од алгоритмите кои работат
со хиерархии на податоци. Единствен недостаток е значителниот број на празни
покажувачи (со нулева вредност). Понатаму ќе видиме како овие слободни
места за покажувачи можат корисно да се употребат.
8
слика 8.9. Нецелосно и целосно бинарно дрво
Класата на бинарни дрва не е поткласа на класата дрва туку нов поим иако двете
класи се со многу сличности. Во суштина двете клучни работи што ги прават
бинарните дрва посебна класа се, правењето разлика помеѓу лево и десно
поддрво и можноста бинарното дрво да биде празно. Важноста на бинарните
дрва не потекнува само од нивната практична применливост туку и од фактот
што секое дрво на едноставен начин може да се претстави како бинарно дрво.
9
слика 8.10а. Произволно дрво
10
слика 8.11. Репрезентација на едноставни дрва со бинарно дрво
Репрезентацијата на шума од дрва со помош на бинарно дрво е тривијална ако
се претпостави дека корените на сите дрва од шумата се браќа. Тогаш согласно
претходно кажаното за даден пример се добива резултатот од слика 8.12.
11
Нека T1, ...,Tn е шума на дрва, тогаш бинарното дрво кое се добива со
трансформацијата на оваа шума може да се означи со B(T1, ..., Tn) и за неа
важи:
(ii) има корен еднаков со коренот (T1); има лево поддрво B(T11,T12, ...,T1m)
каде T11, ..., T1m се поддрва на коренот (T1); има десно поддрво B(T2, ..., Tn).
Ако Т е празно дрво, тогаш празна листа се добива при преордер, инордер и
постордер изминување на дрвото. Ако Т содржи еден јазел, тогаш тој јазел
претставува инордер, постордер и преордер изминување на дрвото Т. Нека ја
имаме структурата на дрвото чиј корен е јазелот K и ги содржи подстеблата T1
и T2. Тогаш:
(a - b ∙ c)/(d + e ∙ f)
12
слика 8.13. Дрво на аритметички израз
преордер: / - a ∙ bc + d ∙ e f
инордер: a-b∙c/d+e∙f
постордер: a b c ∙ - d e f ∙ + /
13
void vmetni_levo(nodep p, info_t x) void vmetni_desno(nodep p, info_t x)
{ {
nodep q=NEW(node); nodep q=NEW(node);
q->info=x; q->info=x;
q->left= p->left; q->right = p->right;
q->right=NULL; q->left=NULL;
p->left=q; p->right=q;
} }
14
слика 8.15 Инордер нанижано бинарно дрво
15
наруши правилната нанижаност. Повеќе детали за овие операции ќе бидат
дадени на аудиториските вежби.
16