binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · binarno stablo tra...

31
1 1 Binarno stablo tra Binarno stablo tra ž ž enja enja Binarno stablo T je Binarno stablo T je binarno stablo tra binarno stablo tra ž ž enja enja ako su ispunjeni sljede ako su ispunjeni sljede ć ć i uvjeti: i uvjeti: č č vorovi od T su ozna vorovi od T su ozna č č eni podacima nekog tipa na kojem je definiran totalni ureñaj eni podacima nekog tipa na kojem je definiran totalni ureñaj . . neka je neka je i i bilo koji bilo koji č č vor od T. Tada su oznake svih vor od T. Tada su oznake svih č č vorova u lijevom vorova u lijevom podstablu podstablu od od i i manje od oznake od manje od oznake od i i . T . T akoñer akoñer , oznake svih , oznake svih č č vorova u desnom vorova u desnom podstablu podstablu od od i i su su ve ve ć ć e ili jednake od oznake od e ili jednake od oznake od i i . .

Upload: others

Post on 26-Oct-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

11

Binarno stablo traBinarno stablo tražženjaenja

�� Binarno stablo T je Binarno stablo T je binarno stablo trabinarno stablo tražženjaenja ako su ispunjeni sljedeako su ispunjeni sljedećći uvjeti:i uvjeti:

�� ččvorovi od T su oznavorovi od T su označčeni podacima nekog tipa na kojem je definiran totalni ureñaj eni podacima nekog tipa na kojem je definiran totalni ureñaj ≤≤..

�� neka je neka je ii bilo koji bilo koji ččvor od T. Tada su oznake svih vor od T. Tada su oznake svih ččvorova u lijevom vorova u lijevom podstablupodstablu od od iimanje od oznake od manje od oznake od ii. T. Takoñerakoñer, oznake svih , oznake svih ččvorova u desnom vorova u desnom podstablupodstablu od od ii su su vevećće ili jednake od oznake od e ili jednake od oznake od ii..

Page 2: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

22

�� Zadatak: Nacrtati izgled binarnog sortiranog stabla (binarnog stZadatak: Nacrtati izgled binarnog sortiranog stabla (binarnog stabla traabla tražženja) nakon enja) nakon dodavanja sljededodavanja sljedeććih podataka: 52, 72, 14, 88, 70, 84, 7, 58 i 96. Nacrtati postupih podataka: 52, 72, 14, 88, 70, 84, 7, 58 i 96. Nacrtati postupak ak dodavanja podatka 81 u tako vedodavanja podatka 81 u tako većć formirano binarno stablo.formirano binarno stablo.

52

14 72

8870

84

7

58 96

81

81

Page 3: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

33

�� Zadatak: Ukoliko se stablo prikazuje jednodimenzionalnim poljem,Zadatak: Ukoliko se stablo prikazuje jednodimenzionalnim poljem, s koliko se s koliko se ččlanova lanova mora dimenzionirati u najgorem i najboljem slumora dimenzionirati u najgorem i najboljem sluččaju ako je potrebno pohraniti 52 aju ako je potrebno pohraniti 52 razlirazliččita elementa?ita elementa?

�� OpOpććenito u stablo dubine enito u stablo dubine kk stane 2stane 2kk--1 1 ččlanova.lanova.

�� Najbolji sluNajbolji sluččaj aj –– stablo stablo ćće biti e biti potpuno,potpuno, pa je za pohranu potrebna dubina koja je pa je za pohranu potrebna dubina koja je jednaka najmanjoj potenciji broja 2 koja je vejednaka najmanjoj potenciji broja 2 koja je većća od 52, a to je 64=2a od 52, a to je 64=266. Dakle, u stablo . Dakle, u stablo dubine 6 stane 63 elementa te je to dovoljno za pohranu 52 elemedubine 6 stane 63 elementa te je to dovoljno za pohranu 52 elementa. U najboljem nta. U najboljem slusluččaju potrebno je polje dimenzionirati na 63. aju potrebno je polje dimenzionirati na 63.

�� Najgori sluNajgori sluččaj aj –– stablo stablo ćće biti potpuno e biti potpuno kosokoso i dubina stabla i dubina stabla ćće biti 52. Za pohranu je e biti 52. Za pohranu je potrebno polje dimenzionirati s 2potrebno polje dimenzionirati s 25252--1= 4,503,599,627,370,495 (1= 4,503,599,627,370,495 (≈≈4.5*104.5*101515))

Page 4: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

44

�� Zadatak: PretraZadatak: Pretražžuje se stablo u kojem se nalazi 27 razliuje se stablo u kojem se nalazi 27 različčitih elemenata. Poitih elemenata. Potrebno je trebno je odrediti koliko se operacija usporeñivanja obavi u najboljem i nodrediti koliko se operacija usporeñivanja obavi u najboljem i najgorem sluajgorem sluččaju za aju za potpuno i koso stablo.potpuno i koso stablo.

�� Potpuno stablo:Potpuno stablo:

�� najbolji slunajbolji sluččaj aj –– pri prvoj usporedbi nañe se element pri prvoj usporedbi nañe se element ⇒⇒ obavljena je jednaobavljena je jedna usporedbausporedba

�� najgori slunajgori sluččaj aj –– podatak se nalazi u "najdubljem" podatak se nalazi u "najdubljem" listulistu. Najmanja potencija broja 2 koja . Najmanja potencija broja 2 koja je veje većća od 27 je 32=2a od 27 je 32=255. Dakle stablo ima dubinu 5 te je potrebno obaviti najvi. Dakle stablo ima dubinu 5 te je potrebno obaviti najvišše pet e pet operacija usporeñivanjaoperacija usporeñivanja..

�� Koso stablo:Koso stablo:

�� najbolji slunajbolji sluččaj aj –– pri prvoj usporedbi nañe se element pri prvoj usporedbi nañe se element ⇒⇒ obavljena je jednaobavljena je jedna usporedbausporedba

�� najgori slunajgori sluččaj aj –– podatak se nalazi u "najdubljem" podatak se nalazi u "najdubljem" listulistu. Budu. Budućći da je u najgorem slui da je u najgorem sluččaju aju stablo u potpunosti koso, razina najdubljeg stablo u potpunosti koso, razina najdubljeg ččvora je 27. Dakle, u najgorem sluvora je 27. Dakle, u najgorem sluččaju aju potrebno je obaviti 27 operapotrebno je obaviti 27 operacija usporeñivanjacija usporeñivanja..

Page 5: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

55

�� Zadatak: Za veZadatak: Za većć formirano binarno stablo potrebno je napisati formirano binarno stablo potrebno je napisati ššto se dobije to se dobije inorderinorder i i postorderpostorder obilaskom. Stablo izgleda na sljedeobilaskom. Stablo izgleda na sljedećći nai naččin:in:

�� Inorder obilazak stabla daje matematiInorder obilazak stabla daje matematiččki izraz:ki izraz:

�� A + B A + B -- C * D / E + F * G C * D / E + F * G –– H H

�� Postorder obilazak takoñer daje matematiPostorder obilazak takoñer daje matematiččki izraz ali u tzv. RPN notaciji:ki izraz ali u tzv. RPN notaciji:

�� A B + C D * A B + C D * -- E F + G H E F + G H -- * /* /

G H

-

E F

+

*

C D

*

A B

+

-

/

Page 6: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

66

Implementacija rjeImplementacija rječčnika pomonika pomoćću binarnog stabla trau binarnog stabla tražženjaenja

�� PomoPomoćću binarnog stabla trau binarnog stabla tražženja moenja možžemo na efikasan naemo na efikasan naččin implementirati operacije in implementirati operacije umetanja, traumetanja, tražženja i brisanja elemenata u skupu podataka enja i brisanja elemenata u skupu podataka -- obradit obradit ććemo primjer rjeemo primjer rječčnika nika s predavanjas predavanja

�� Operacije koje Operacije koje ććemo implementirati su sljedeemo implementirati su sljedećće:e:

�� Insert(x, T) Insert(x, T) –– operacija koja ubacuje novi element operacija koja ubacuje novi element xx u binarno stablo trau binarno stablo tražženja T.enja T.

�� MemberMember (x, T) (x, T) –– operacija koja vraoperacija koja vraćća vrijednost 1 ako se element x nalazi u stablu a vrijednost 1 ako se element x nalazi u stablu tratražženja T, a u suprotnom vraenja T, a u suprotnom vraćća 0a 0

�� DeleteDelete(x, T) (x, T) –– operacija koja uklanja element x iz binarnog stabla traoperacija koja uklanja element x iz binarnog stabla tražženja T.enja T.

�� InorderInorder(T) (T) –– operacija koja obilazi binarno stablo traoperacija koja obilazi binarno stablo tražženja T enja T ččvor po vor po ččvor algoritmom vor algoritmom ““inorderinorder”” i ispisuje sve njegove elemente.i ispisuje sve njegove elemente.

�� Operacije Insert i Operacije Insert i MemberMember rade slirade sliččno: trano: tražže mjesto u stablu na kojem bi morao biti (novi) e mjesto u stablu na kojem bi morao biti (novi) element, te ubacuje element, te ubacuje ččvor na to mjesto ili javlja da vor na to mjesto ili javlja da ččvor (ne)postojivor (ne)postoji

Page 7: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

77

�� NeNeššto je sloto je složženija operacija Delete(x, T). Imamo tri sluenija operacija Delete(x, T). Imamo tri sluččaja:aja:

�� xx je u listu; tada jednostavno izbacimo list iz stabla.je u listu; tada jednostavno izbacimo list iz stabla.

�� xx je u je u ččvoru koji ima samo jedno dijete. Tada nadomjestimo voru koji ima samo jedno dijete. Tada nadomjestimo ččvor od vor od xx njegovim njegovim djetetom.djetetom.

�� xx je u je u ččvoru koji ima oba djeteta. Tavoru koji ima oba djeteta. Tada nañemo najmanji element da nañemo najmanji element yy u desnom u desnom podstablu podstablu ččvora vora xx. Izbacimo . Izbacimo ččvor od vor od yy (jedan od dva prethodna slu(jedan od dva prethodna sluččaja). U aja). U ččvor vor xxspremimo spremimo yy umjesto umjesto xx..

�� Sve se ovo spretno moSve se ovo spretno možže zapisati ako uvedemo pomoe zapisati ako uvedemo pomoććnu funkciju DeleteMin(T). Ta nu funkciju DeleteMin(T). Ta funkcija iz nepraznog stabla T izbacuje funkcija iz nepraznog stabla T izbacuje ččvor s najmanjim elementom, te vravor s najmanjim elementom, te vraćća taj a taj najmanji element.najmanji element.

�� Svaka od funkcija Member, Insert, Delete prolazi jednim putem, oSvaka od funkcija Member, Insert, Delete prolazi jednim putem, od korijena binarnog d korijena binarnog stabla do nekog stabla do nekog ččvora. Zato je vrijeme izvrvora. Zato je vrijeme izvrššavanja svih operacija ograniavanja svih operacija ograniččeno visinom eno visinom stabla. Pretpostavimo da u stablu imamo stabla. Pretpostavimo da u stablu imamo nn elemenata elemenata. V. Visina stabla tada varira izmeñu isina stabla tada varira izmeñu (log(log22(n+1))(n+1))--1 i 1 i nn –– 1. Ekstremni slu1. Ekstremni sluččajevi su potpuno stablo i "ispruajevi su potpuno stablo i "ispružženo" stablo eno" stablo ––lanac.lanac.

Page 8: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

88

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#include <time.h>#include <time.h>typedef int elementtype;typedef int elementtype;struct node{struct node{

elementtype el;elementtype el;struct node * left;struct node * left;struct node * right;struct node * right; };};

typedef struct node * BSTree;typedef struct node * BSTree;int Member(elementtype x, BSTree t){int Member(elementtype x, BSTree t){

if (t == NULL) return 0;if (t == NULL) return 0;if (x == tif (x == t-->el) return 1;>el) return 1;if (x < tif (x < t-->el)>el) return Member(x, treturn Member(x, t-->left);>left);elseelse return Member(x, treturn Member(x, t-->right);}>right);}

intint Insert(elementtype x, BSTree * t){Insert(elementtype x, BSTree * t){BSTree tree = *t;BSTree tree = *t;if (tree == NULL){if (tree == NULL){

tree = malloc(sizeof(struct node));tree = malloc(sizeof(struct node));treetree-->el = x;>el = x;treetree-->left = tree>left = tree-->right = NULL;>right = NULL;*t = tree;*t = tree;returnreturn 11;; }}

if (x == treeif (x == tree-->el) return 0; // x je ve>el) return 0; // x je većć u rjeu rječčnikunikuif (x < treeif (x < tree-->el)>el) return return Insert(x, &treeInsert(x, &tree-->left);>left);elseelse return return Insert(x, &treeInsert(x, &tree-->right)>right);;}}

Page 9: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

99

elementtype DeleteMin(BSTree * t)elementtype DeleteMin(BSTree * t){{

BSTree temp;BSTree temp;BSTree tree = *t;BSTree tree = *t;elementtype minval;elementtype minval;

if (treeif (tree-->left == NULL)>left == NULL){{

// tree pokazuje na cvor s najmanjim elementom. Nadomjestimo taj// tree pokazuje na cvor s najmanjim elementom. Nadomjestimo taj cvor njegovimcvor njegovim// desnim djetetom// desnim djetetomminval = treeminval = tree-->el;>el;temp = tree;temp = tree;tree = treetree = tree-->right;>right;free(temp);free(temp);

}}elseelse

////ccvor na kojeg pokazuje tree ima lijevo dijetevor na kojeg pokazuje tree ima lijevo dijeteminval = DeleteMin(&treeminval = DeleteMin(&tree-->left);>left);

*t = tree;*t = tree;return minval;return minval;

}}

Page 10: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1010

void Delete(elementtype x, BSTree * t)void Delete(elementtype x, BSTree * t) {{BSTree temp;BSTree temp;BSTree tree = *t;BSTree tree = *t;if (tree == NULL) return;if (tree == NULL) return;if (x < treeif (x < tree-->el)>el)

Delete(x, &treeDelete(x, &tree-->left);>left);elseelse if (x > treeif (x > tree-->el)>el)

Delete(x, &treeDelete(x, &tree-->right);>right);//ako do//ako doññemo ovamo, tada je x u emo ovamo, tada je x u ččvoru na kojeg pokazuje tvoru na kojeg pokazuje telseelse if (treeif (tree-->left == NULL && tree>left == NULL && tree-->right == NULL)>right == NULL) {{

free(tree);free(tree);tree = NULL;tree = NULL;

}} elseelse {{if (treeif (tree-->left == NULL)>left == NULL){{ //nadomjestimo //nadomjestimo ččvor od x njegovim desnim djetetomvor od x njegovim desnim djetetom

temp = tree;temp = tree;tree = treetree = tree-->right;>right;free(temp);free(temp);

}} elseelse if (treeif (tree-->right == NULL)>right == NULL) {// lijev{// lijevoo ddiijetejete u u ččvor od xvor od xtemp = tree;temp = tree;tree = treetree = tree-->left;>left;free(temp);free(temp);

}} else //postoje oba djetetaelse //postoje oba djetetatreetree-->el = DeleteMin(&tree>el = DeleteMin(&tree-->right);>right);

}} *t = tree;*t = tree;}}

Page 11: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1111

void Inorder(BSTree t)void Inorder(BSTree t) {{if (t == NULL) return;if (t == NULL) return;if (tif (t-->left != NULL)>left != NULL)

Inorder(tInorder(t-->left);>left);printf("%i ", tprintf("%i ", t-->el);>el);if (tif (t-->right != NULL)>right != NULL)

Inorder(tInorder(t-->right);>right);}}

int main()int main() {{BSTree myTree = NULL; BSTree myTree = NULL; //// kreiramo prazno stablokreiramo prazno stablo i i ubacimo nekoliko elemenataubacimo nekoliko elemenataint broj,ind=0,fg;int broj,ind=0,fg;elementtype clan;elementtype clan;

printf ("Koliko clanova zelite upisati u listuprintf ("Koliko clanova zelite upisati u listu\\n");n");scanf("%d",&broj);scanf("%d",&broj);printf("printf("\\n");n");srand(time(NULL));srand(time(NULL));do { clan = (elementtype) 100 * ((float)rand() / (RANdo { clan = (elementtype) 100 * ((float)rand() / (RAND_MAX + 1));D_MAX + 1));

fg=Insert(clan,&myTree);fg=Insert(clan,&myTree);ind+=fg,ind+=fg,} while(ind<broj)} while(ind<broj)

//prosetamo po stablu algoritmom inorder i ispisemo elemente//prosetamo po stablu algoritmom inorder i ispisemo elementeInorder(myTree);Inorder(myTree);printf("printf("\\n");n");

Page 12: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1212

//izbrisemo element//izbrisemo elementprintf("Upisite element koji zelite izbrisati, printf("Upisite element koji zelite izbrisati, --1 za kraj1 za kraj\\n");n");do {do {

scanf("%d",&clan);scanf("%d",&clan);Delete(clan,&myTree);Delete(clan,&myTree);Inorder(myTree);Inorder(myTree);

printf("printf("\\n");n");}}

while (clan != while (clan != --1);1);// provjera da li je element u rjecniku// provjera da li je element u rjecniku

printf("Upisite element koji trazite, printf("Upisite element koji trazite, --1 za kraj1 za kraj\\n");n");do {do {

scanf("%d",&clan);scanf("%d",&clan);if (Member(clan, myTree))if (Member(clan, myTree))printf("Broj %d se nalazi u stablu",clan);printf("Broj %d se nalazi u stablu",clan);

elseelseprintf("Broj %d se ne nalazi u stablu",clan);printf("Broj %d se ne nalazi u stablu",clan);

printf("printf("\\n");n");} while (clan != } while (clan != --1);1);system(system(““PAUSEPAUSE””););return 0;return 0;

}}

Page 13: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1313

DrugaDrugaččija izvedba binarnog stabla traija izvedba binarnog stabla tražženjaenja

�� Primjer: napraviti binarno stablo traPrimjer: napraviti binarno stablo tražženja u koje se unosi do 14 znakova (enja u koje se unosi do 14 znakova (charchar) p) po o ureñaju abecedeureñaju abecede. Ispisati stablo po . Ispisati stablo po inorderinorder, , preorderpreorder i i postorderpostorder algoritmu algoritmu. T. Takoñer akoñer ispisati strukturu stabla. Napisati funkciju koja pretraispisati strukturu stabla. Napisati funkciju koja pretražžuje stablo i javlja da li se trauje stablo i javlja da li se tražženi eni element nalazi u stablu.element nalazi u stablu.

�� Neka su ulazni podaci {Neka su ulazni podaci {CC,, BB,, GG,, AA,, EE,, FF,, N,N, D,D, PP,, CC,, QQ,, ZZ,, II,, RR, H, J, O}. Stablo , H, J, O}. Stablo ćće onda e onda biti:biti:

CC

/ / \\

B B GG

/ // / \\

A E A E NN

/ / \\ / / \\

D FD F I PI P

/ / \\ / / \\

H J O QH J O Q

\\

ZZ

//

RR

Page 14: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1414

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#include <malloc.h>#include <malloc.h>#include <string.h>#include <string.h>

struct cv {struct cv {char element[15];char element[15];struct cv *lijevo;struct cv *lijevo;struct cv *desno;struct cv *desno;

};};typedef struct cv cvor;typedef struct cv cvor;

// upisuje u stablo podatke: lijevo manji, desno veci// upisuje u stablo podatke: lijevo manji, desno vecicvor *upis (cvor *glava, char element[]) {cvor *upis (cvor *glava, char element[]) {int smjer; // odluka o podstabluint smjer; // odluka o podstablu

if (glava == NULL) { // prazno (pod)stabloif (glava == NULL) { // prazno (pod)stabloglava = (cvor *) malloc (sizeof (cvor));glava = (cvor *) malloc (sizeof (cvor));if (glava) {if (glava) {strcpy (glavastrcpy (glava-->element, element);>element, element);glavaglava-->lijevo = glava>lijevo = glava-->desno = NULL;>desno = NULL;

} else {} else {printf ("U memoriji nema mjesta za upisati '%s'printf ("U memoriji nema mjesta za upisati '%s'\\n", element);n", element);

}}}}

Page 15: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1515

else if ((smjer = strcmp (element, glavaelse if ((smjer = strcmp (element, glava-->element)) < 0) {>element)) < 0) {glavaglava-->lijevo = upis (glava>lijevo = upis (glava-->lijevo, element);>lijevo, element);

} else if (smjer > 0) {} else if (smjer > 0) {glavaglava-->desno = upis (glava>desno = upis (glava-->desno, element);>desno, element);

} else {} else {printf ("Podatak '%s' vec postoji!printf ("Podatak '%s' vec postoji!\\n", element);n", element);

}}return glava; // pokazivac nreturn glava; // pokazivac na zadnjia zadnji elementelement

}}

// obilazak inorder lijevo// obilazak inorder lijevo--desno:obilazi najlijevije podstablo, pa korijen, pa onda ostaladesno:obilazi najlijevije podstablo, pa korijen, pa onda ostalavoid ispisinld (cvor *glava) {void ispisinld (cvor *glava) {if (glava != NULL) {if (glava != NULL) {

ispisinld (glavaispisinld (glava-->lijevo);>lijevo);printf ("%s printf ("%s \\n", glavan", glava-->element);>element);ispisinld (glavaispisinld (glava-->desno);>desno);

}}}}

// obilazak inorder desno// obilazak inorder desno--lijevolijevovoid ispisindl (cvor *glava) {void ispisindl (cvor *glava) {if (glava != NULL) {if (glava != NULL) {

ispisindl (glavaispisindl (glava-->desno);>desno);printf ("%s printf ("%s \\n", glavan", glava-->element);>element);ispisindl (glavaispisindl (glava-->lijevo);>lijevo);

}} }}

Page 16: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1616

// obilazak preorder: prvo korijen, pa obilazi podstabla od najl// obilazak preorder: prvo korijen, pa obilazi podstabla od najlijevijegijevijegvoid ispispre (cvor *glava) {void ispispre (cvor *glava) {if (glava != NULL) {if (glava != NULL) {printf ("%s printf ("%s \\n", glavan", glava-->element);>element);ispispre (glavaispispre (glava-->lijevo);>lijevo);ispispre (glavaispispre (glava-->desno);>desno);

}} }}

// obilazak postorder:obilazi podstabla od najlijevijeg, korijen// obilazak postorder:obilazi podstabla od najlijevijeg, korijen zadnjizadnjivoid ispispost (cvor *glava) {void ispispost (cvor *glava) {if (glava != NULL) {if (glava != NULL) {ispispost (glavaispispost (glava-->lijevo);>lijevo);ispispost (glavaispispost (glava-->desno);>desno);printf ("%s printf ("%s \\n", glavan", glava-->element);>element);

}} }}

// ispis stabla// ispis stablavoid ispissta (cvor *glava, int nivo) {void ispissta (cvor *glava, int nivo) {int i;int i;if (glava != NULL) {if (glava != NULL) {ispissta (glavaispissta (glava-->desno, nivo+1);>desno, nivo+1);for (i = 0; i < nivo; i++) printf(" ");for (i = 0; i < nivo; i++) printf(" ");printf ("%s printf ("%s \\n", glavan", glava-->element);>element);ispissta (glavaispissta (glava-->lijevo, nivo+1);>lijevo, nivo+1);

}} }}

Page 17: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1717

// trazenje cvora u binarnom stablu// trazenje cvora u binarnom stablucvor *trazi (cvor *glava, char element[]) {cvor *trazi (cvor *glava, char element[]) {

int smjer;int smjer;if (glava) {if (glava) {

if ((smjer = strcmp (element, glavaif ((smjer = strcmp (element, glava-->element)) < 0) {>element)) < 0) {return trazi (glavareturn trazi (glava-->lijevo, element);>lijevo, element);

} else if (smjer > 0) {} else if (smjer > 0) {return trazi (glavareturn trazi (glava-->desno, element);>desno, element);

}} }}return glava; // ili je pronadjen ili NULL;return glava; // ili je pronadjen ili NULL; }}

void main(void) {void main(void) {FILE *fi;FILE *fi; // ulazna datoteka// ulazna datotekaint j;int j; // brojac podataka// brojac podatakacvor *glava, *p;cvor *glava, *p; // pokazivac na korijen, pomocni pokazivac// pokazivac na korijen, pomocni pokazivacchar ime[15];char ime[15]; ////

fi = fopen ("UlazZaSortiranoStablo.txt", "r");fi = fopen ("UlazZaSortiranoStablo.txt", "r");if (fi) {if (fi) { // inicijalizacija i citanje podataka// inicijalizacija i citanje podatakaj = 1;j = 1;glava = NULL;glava = NULL;while (fscanf (fi, "%s", &ime) != EOF) {while (fscanf (fi, "%s", &ime) != EOF) {printf ("%d. ulazni podatak je %s printf ("%d. ulazni podatak je %s \\n", j++, ime);n", j++, ime);glava = upis (glava, ime);glava = upis (glava, ime);

}} fclose (fi);fclose (fi);

Page 18: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1818

getchar ();getchar (); // obilazak i ispis stabla// obilazak i ispis stablaprintf ("Ispis inorder lijevoprintf ("Ispis inorder lijevo--desnodesno\\n");n");ispisinld (glava);ispisinld (glava); getchar ();getchar ();printf ("Ispis inorder desnoprintf ("Ispis inorder desno--lijevolijevo\\n");n");ispisindl (glava);ispisindl (glava); getchar ();getchar ();printf ("Ispis preorderprintf ("Ispis preorder\\n");n");ispispre (glava);ispispre (glava); getchar ();getchar ();printf ("Ispis postorderprintf ("Ispis postorder\\n");n");ispispost (glava);ispispost (glava); getchar ();getchar ();printf ("Ispis stablaprintf ("Ispis stabla\\n");n");ispissta (glava, 0);ispissta (glava, 0);

while (1) {while (1) { // trazenje elementa// trazenje elementaprintf ("Unesite element koji trazite, ili KRAJ >");printf ("Unesite element koji trazite, ili KRAJ >");scanf ("%s", ime);scanf ("%s", ime);if (stricmp (ime, "KRAJ") == 0) break;if (stricmp (ime, "KRAJ") == 0) break;p = trazi (glava, ime);p = trazi (glava, ime);if (p) {if (p) {

printf ("Pronadjen je element: %sprintf ("Pronadjen je element: %s\\n", pn", p-->element);>element);} else {} else {

printf ("Nije pronadjen element: %sprintf ("Nije pronadjen element: %s\\n", ime);n", ime);}} }} }}

else {else {printf ("Nema ulaznih podatakaprintf ("Nema ulaznih podataka\\n");n");

exit (1); }exit (1); }system(system(““PAUSEPAUSE””););exit (0);exit (0); }}

Page 19: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

1919

Primjer baratanja s podatcima u binarnom stablu traPrimjer baratanja s podatcima u binarnom stablu tražženjaenja

�� Napisati funkciju koja upisuje u Napisati funkciju koja upisuje u ččvor BST podatke tipa: naziv proizvoda (vor BST podatke tipa: naziv proizvoda (charchar 15) i cijena 15) i cijena ((floatfloat). Ur). Ureñaj izmeñu zapisa u eñaj izmeñu zapisa u ččvorovima odreñuje naziv proizvoda vorovima odreñuje naziv proizvoda (manje zna(manje značči blii bližže e popoččetku abecede). Napisati funkciju koja ispietku abecede). Napisati funkciju koja ispišše zapise u BST po algoritmu INORDER, te e zapise u BST po algoritmu INORDER, te funkciju koja izrafunkciju koja izraččuna prosjeuna prosječčnu cijenu proizvoda u cjeniku.nu cijenu proizvoda u cjeniku.

Page 20: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2020

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#include <malloc.h>#include <malloc.h>#include <string.h>#include <string.h>

typedef struct {typedef struct {char artikl[15+1];char artikl[15+1];float cijena;float cijena;

} el;} el;

typedef struct cv {typedef struct cv {el element;el element;struct cv *lijevo;struct cv *lijevo;struct cv *desno;struct cv *desno;

} cvor;} cvor;

typedef struct {typedef struct {float suma;float suma;int broj;int broj;

} pros;} pros;

Page 21: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2121

// upisuje u stablo podatke: lijevo manji, desno veci// upisuje u stablo podatke: lijevo manji, desno vecicvor *upis (cvor *glava, el element) {cvor *upis (cvor *glava, el element) {int smjer;int smjer;if (glava == NULL) {if (glava == NULL) {glava = (cvor *) malloc (sizeof (cvor));glava = (cvor *) malloc (sizeof (cvor));

if (glava) {if (glava) {glavaglava-->element = element;>element = element;glavaglava-->lijevo = glava>lijevo = glava-->desno = NULL;>desno = NULL;

} else {} else {printf ("Nema dovoljno memorije!printf ("Nema dovoljno memorije!\\n");n");

}}} } else if ((smjer = strcmp (element.artikl, glavaelse if ((smjer = strcmp (element.artikl, glava-->element.artikl)) < 0) {>element.artikl)) < 0) {glavaglava-->lijevo = upis (glava>lijevo = upis (glava-->lijevo, element);>lijevo, element);

} } else if (smjer > 0) {else if (smjer > 0) {glavaglava-->desno = upis (glava>desno = upis (glava-->desno, element);>desno, element);

} } else {else {printf ("Podatak '%s' vec postoji!printf ("Podatak '%s' vec postoji!\\n", element.artikl);n", element.artikl);

}}return glava;return glava;

}}

Page 22: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2222

// ispis inorder// ispis inordervoid ispisin (cvor *glava) {void ispisin (cvor *glava) {if (glava != NULL) {if (glava != NULL) {ispisin (glavaispisin (glava-->lijevo);>lijevo);printf ("%printf ("%--15s %6.2f15s %6.2f\\n", glavan", glava-->element.artikl, glava>element.artikl, glava-->element.cijena);>element.cijena);ispisin (glavaispisin (glava-->desno);>desno);

}}}}

// sumiranje cijena i brojanje elemenata// sumiranje cijena i brojanje elemenatavoid prosjek (cvor *glava, pros *prs) {void prosjek (cvor *glava, pros *prs) {if (glava != NULL) {if (glava != NULL) {

prsprs-->suma += glava>suma += glava-->element.cijena;>element.cijena;prsprs-->broj++;>broj++;

prosjek (glavaprosjek (glava-->lijevo, prs);>lijevo, prs);prosjek (glavaprosjek (glava-->desno, prs);>desno, prs);

}}}}

void main(void) {void main(void) {FILE *fi;FILE *fi;int j;int j;cvor *glava;cvor *glava; // pokazivac na korijen// pokazivac na korijenel element;el element; // sadrzaj cvora// sadrzaj cvorapros prs;pros prs; // broj elemenata i suma cijena// broj elemenata i suma cijena

Page 23: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2323

prs.suma = 0.; prs.broj = 0;prs.suma = 0.; prs.broj = 0;fi = fopen ("UlazZaProsjekUStablu.txt", "r");fi = fopen ("UlazZaProsjekUStablu.txt", "r");if (!fi) {if (!fi) {printf ("Nema ulaznih podatakaprintf ("Nema ulaznih podataka\\n");n");

exit (1);exit (1);}}j = 1;j = 1;glava = NULL;glava = NULL;while (fscanf (fi, "%s %f", element.artikl, &element.cijena) !while (fscanf (fi, "%s %f", element.artikl, &element.cijena) != EOF) {= EOF) {printf ("%2d. ulazni podatak je %printf ("%2d. ulazni podatak je %--15s %6.2f15s %6.2f\\n", j++, element.artikl, element.cijena);n", j++, element.artikl, element.cijena);glava = upis (glava, element);glava = upis (glava, element);

}}fclose (fi);fclose (fi);// ispis, racun sume cijena i broja elemenata// ispis, racun sume cijena i broja elemenatagetchar ();getchar ();ispisin (glava);ispisin (glava);getchar ();getchar ();prosjek (glava, &prs);prosjek (glava, &prs);if (prs.broj) {if (prs.broj) {

printf ("Suma=%6.2f, Broj cvorova=%d, Prosjek=%6.2fprintf ("Suma=%6.2f, Broj cvorova=%d, Prosjek=%6.2f\\n",n",prs.suma, prs.broj, prs.suma / prs.broj);prs.suma, prs.broj, prs.suma / prs.broj);

getchar ();getchar ();}}exit (0);exit (0);

}}

Page 24: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2424

NeNeššto sloto složženiji primjer binarnog stabla traeniji primjer binarnog stabla tražženjaenja

Zadatak: Zadatak: ZadaniZadani susu podacipodaci o o studentustudentu: : matimatiččnini brojbroj long, long, imeime 25 25 znakovaznakova, , prezimeprezime 25 25 znakovaznakova i i godinagodina roñenjaroñenja short.short. Uz uporabu dinamiUz uporabu dinamiččke strukture binarnog sortiranog ke strukture binarnog sortiranog stabla (stabla (tjtj. binarno stablo tra. binarno stablo tražženja) potrebno je napisati funkcije za:enja) potrebno je napisati funkcije za:

a) pohranu podataka o studentima uz uvjet da je omogua) pohranu podataka o studentima uz uvjet da je omoguććeno breno bržže pronalae pronalažženje enje studenata po prezimenustudenata po prezimenu

b) pronalab) pronalažženje studenta po prezimenuenje studenta po prezimenu

c) ispis c) ispis ččvorova po INORDER algoritmuvorova po INORDER algoritmu

d) ispis d) ispis ččvorova na zadanoj razinivorova na zadanoj razini

e) izrae) izraččunavanje dubine stabla i najmanje razine listova unavanje dubine stabla i najmanje razine listova

f) ispis listova stabla f) ispis listova stabla

Page 25: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2525

#include <stdio.h>#include <stdio.h>

#include <stdlib.h>#include <stdlib.h>

#include <string.h>#include <string.h>

struct podaci {struct podaci {

long matBroj;long matBroj;

char ime[25char ime[25+1+1];];

char prezime[25char prezime[25+1+1];];

short godRod;short godRod;

};};

typedef struct podaci Podaci;typedef struct podaci Podaci;

struct cvor {struct cvor {

Podaci * student;Podaci * student;

struct cvor * lijevo;struct cvor * lijevo;

struct cvor * desno;struct cvor * desno;

};};

typedef struct cvor Cvor;typedef struct cvor Cvor;

Page 26: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2626

// funkcija dodaje // funkcija dodaje podatak podatak u binarno sortirano stablo, kljuc je prezimeu binarno sortirano stablo, kljuc je prezimeCvor * dodajPrezime (Cvor * korijen, Podaci * student) {Cvor * dodajPrezime (Cvor * korijen, Podaci * student) {int smjer;int smjer;if (korijen == NULL) {if (korijen == NULL) {korijen = (Cvor *) malloc (sizeof(Cvor));korijen = (Cvor *) malloc (sizeof(Cvor));if (korijen) {if (korijen) {korijenkorijen-->student = student;>student = student;korijenkorijen-->lijevo = korijen>lijevo = korijen-->desno = NULL; }>desno = NULL; }

} else if ((smjer = strcmp(student} else if ((smjer = strcmp(student-->prezime, korijen>prezime, korijen-->student>student-->prezime)) < 0)>prezime)) < 0)korijenkorijen-->lijevo = dodajPrezime (korijen>lijevo = dodajPrezime (korijen-->lijevo, student);>lijevo, student);

else if (smjer > 0)else if (smjer > 0)korijenkorijen-->desno = dodajPrezime (korijen>desno = dodajPrezime (korijen-->desno, student);>desno, student);

elseelseprintf("Podatak %s vec postoji!printf("Podatak %s vec postoji!\\n", studentn", student-->prezime);>prezime);

return korijen;}return korijen;}

// funkcija pretrazuje binarno stablo trazenja po kljucu prezime// funkcija pretrazuje binarno stablo trazenja po kljucu prezimeCvor * potraziPrezime (Cvor * korijen, char * prezime) {Cvor * potraziPrezime (Cvor * korijen, char * prezime) {int smjer;int smjer;if (korijen) {if (korijen) {if ((smjer = strcmp(prezime, korijenif ((smjer = strcmp(prezime, korijen-->student>student-->prezime)) < 0)>prezime)) < 0)return potraziPrezime (korijenreturn potraziPrezime (korijen-->lijevo, prezime);>lijevo, prezime);

else if (smjer > 0)else if (smjer > 0)return potraziPrezime (korijenreturn potraziPrezime (korijen-->desno, prezime); }>desno, prezime); }

return korijen;return korijen; }}

Page 27: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2727

// funkcija inorder ispisuje zadano binarno stablo// funkcija inorder ispisuje zadano binarno stablovoid inOrder (Cvor * korijen) {void inOrder (Cvor * korijen) {if (korijen) {if (korijen) {inOrder (korijeninOrder (korijen-->lijevo);>lijevo);printf("%s, %s %d %dprintf("%s, %s %d %d\\n", korijenn", korijen-->student>student-->prezime, korijen>prezime, korijen-->student>student-->ime,>ime,korijenkorijen-->student>student-->matBroj,korijen>matBroj,korijen-->student>student-->godRod);>godRod);inOrder (korijeninOrder (korijen-->desno);>desno);

}}}}

// funkcija ispisuje sve cvorove zadane dubine// funkcija ispisuje sve cvorove zadane dubine// poziv ispis(korijen, 1, n) gdje je n trazena dubina// poziv ispis(korijen, 1, n) gdje je n trazena dubinavoid ispisi (Cvor * korijen, int trenutnaDubina, int trazenaDubivoid ispisi (Cvor * korijen, int trenutnaDubina, int trazenaDubina) {na) {if (korijen) {if (korijen) {if (trenutnaDubina == trazenaDubina)if (trenutnaDubina == trazenaDubina)printf("%d %s %s %dprintf("%d %s %s %d\\n",korijenn",korijen-->student>student-->matBroj, korijen>matBroj, korijen-->student>student-->ime,>ime,korijenkorijen-->student>student-->prezime,korijen>prezime,korijen-->student>student-->godRod);>godRod);

ispisi (korijenispisi (korijen-->lijevo, trenutnaDubina + 1, trazenaDubina);>lijevo, trenutnaDubina + 1, trazenaDubina);ispisi (korijenispisi (korijen-->desno, trenutnaDubina + 1, trazenaDubina);>desno, trenutnaDubina + 1, trazenaDubina);

}}}}

Page 28: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2828

// funkcija trazi listove s najvecom i najmanjom razinom// funkcija trazi listove s najvecom i najmanjom razinomvoid dubine(Cvor * korijen, int trenDub, int * maxDub, int * minvoid dubine(Cvor * korijen, int trenDub, int * maxDub, int * minDub) {Dub) {if (korijen) {if (korijen) {if (!korijenif (!korijen-->lijevo & !korijen>lijevo & !korijen-->desno) {>desno) {if (*maxDub == 0 || trenDub > *maxDub)if (*maxDub == 0 || trenDub > *maxDub)*maxDub = trenDub;*maxDub = trenDub;

if (*minDub == 0 || trenDub < *minDub)if (*minDub == 0 || trenDub < *minDub)*minDub = trenDub;*minDub = trenDub;

}}else {else {dubine(korijendubine(korijen-->lijevo, trenDub + 1, maxDub, minDub);>lijevo, trenDub + 1, maxDub, minDub);dubine(korijendubine(korijen-->desno, trenDub + 1, maxDub, minDub);>desno, trenDub + 1, maxDub, minDub);}}

}}}}

// funkcija za zadano binarno stablo ispisuje listove// funkcija za zadano binarno stablo ispisuje listovevoid ispisiListove(Cvor * korijen) {void ispisiListove(Cvor * korijen) {if (korijen) {if (korijen) {if (!korijenif (!korijen-->lijevo & !korijen>lijevo & !korijen-->desno)>desno)printf("%s %s %d %d; ", korijenprintf("%s %s %d %d; ", korijen-->student>student-->ime, korijen>ime, korijen-->student>student-->prezime,>prezime,

korijenkorijen-->student>student-->matBroj,korijen>matBroj,korijen-->student>student-->godRod);>godRod);ispisiListove(korijenispisiListove(korijen-->lijevo);>lijevo);ispisiListove(korijenispisiListove(korijen-->desno);>desno);

}}}}

Page 29: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

2929

void main () {void main () {FILE * fUl;FILE * fUl;char buf[256], trazim[25char buf[256], trazim[25+1+1];];Podaci * student;Podaci * student;Cvor * korijenPrezime = NULL;Cvor * korijenPrezime = NULL;Cvor * trazeni;Cvor * trazeni;int minDubina = 0, maxDubina = 0;int minDubina = 0, maxDubina = 0;int i;int i;

if ((fUl = fopen("studenti.txt", "r")) == NULL) {if ((fUl = fopen("studenti.txt", "r")) == NULL) {printf("Ne mogu otvoriti 'studenti.txt'printf("Ne mogu otvoriti 'studenti.txt'\\n");n");exit(1);exit(1);

}}while (fgets(buf, 256, fUl)) {while (fgets(buf, 256, fUl)) {student = (Podaci *) malloc(sizeof(Podaci));student = (Podaci *) malloc(sizeof(Podaci));sscanf(buf, "%ld;%[^;];%[^;];%d", &(studentsscanf(buf, "%ld;%[^;];%[^;];%d", &(student-->matBroj), student>matBroj), student-->ime,>ime,studentstudent-->prezime, &(student>prezime, &(student-->godRod));>godRod));

korijenPrezime = dodajPrezime(korijenPrezime, student);korijenPrezime = dodajPrezime(korijenPrezime, student);}}fclose(fUl);fclose(fUl);

inOrder(korijenPrezime);inOrder(korijenPrezime);printf("printf("\\n");n");

Page 30: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

3030

while (1){while (1){

printf("Upisite prezime koje se trazi, kraj za prekid trazenjaprintf("Upisite prezime koje se trazi, kraj za prekid trazenja\\n");n");

scanf("%s",trazim);scanf("%s",trazim);

if (strcmp(trazim,"kraj")==0) break;if (strcmp(trazim,"kraj")==0) break;

if(trazeni = potraziPrezime(korijenPrezime, trazim))if(trazeni = potraziPrezime(korijenPrezime, trazim))

printf("Pronasao: %s, %s %ld %dprintf("Pronasao: %s, %s %ld %d\\n", trazenin", trazeni-->student>student-->prezime,>prezime,

trazenitrazeni-->student>student-->ime, trazeni>ime, trazeni-->student>student-->matBroj, trazeni>matBroj, trazeni-->student>student-->godRod);>godRod);

elseelse

printf("Nije nadjen student %sprintf("Nije nadjen student %s\\n",trazim);n",trazim);

}}

printf("printf("\\nIspis listova:nIspis listova:\\n");n");

ispisiListove(korijenPrezime);ispisiListove(korijenPrezime);

dubine(korijenPrezime, 1, &maxDubina, &minDubina);dubine(korijenPrezime, 1, &maxDubina, &minDubina);

printf("printf("\\nMaxDubina=%d MinDubina=%dnMaxDubina=%d MinDubina=%d\\n", maxDubina, minDubina);n", maxDubina, minDubina);

for (i=1; i<=maxDubina; i++) {for (i=1; i<=maxDubina; i++) {

printf("%d razina:printf("%d razina:\\n", i);n", i);

ispisi(korijenPrezime, 1, i);ispisi(korijenPrezime, 1, i);

}}

system(system(““PAUSEPAUSE””););

}}

Page 31: Binarno stablo tra ženja - lnr.irb.hrlnr.irb.hr/soya/nastava/vjezbe08-6.pdf · Binarno stablo tra ženja Binarno stablo T je binarno stablo traženja ako su ispunjeni sljede ći

3131

LovMLovM

/ / \\

IviI IviI PerSPerS

/ / \\ / / \\

BisM KarA LoBisM KarA LovT ZagSvT ZagS

/ / \\ \\ \\ //

AntA HorA KosJ MatAntA HorA KosJ MatM VesMM VesM

/ / / // /

FilA FilA MajM SteDMajM SteD

/ / \\ //

BohN BohN MarJ PetPMarJ PetP