Professional Documents
Culture Documents
Bin Arn As Tabla
Bin Arn As Tabla
Bin Arn As Tabla
LETNJI SEMESTAR
BINARNA STABLA
(BINARY TREES)
Primeri
Memorijska reprezentacija
Implementacija
Operacije
2
BINARNA STABLA - DEFINICIJA
Knutovo binarno A
Binarno stablo je uređeno stablo
stablo
gde svaki čvor ima najviše dvoje
dece Levo B C
podstablo
levo dete i desno dete čvora A
Podstabla S1 i S2 čvora u D E F
nazivaju se levo (S1) i desno
(S2) podstablo, a u je njihov G H
roditelj
Strikno binarno
Ovakvo binarno stablo se takođe stablo
Desno
podstablo
naziva Knutovo binarno stablo A čvora A
B C
Striktno binarno stablo - u
svakom čvoru ima 0 ili 2
podstabla Levo dete
D E
(2-stablo, pravo binarno čvora C
Desno dete
stablo) F G čvora C
3
KOMPLETNO BINARNO STABLO
nivo
Kompletno ili potpuno 0
A
binarno stablo visine h je
striktno binarno stablo čiji 1 B
su svi listovi na nivou h C
2
Ukupan broj čvorova u D E F G
kompletnom binarnom
3
stablu visine h je H I J K L M N O
n = 20+21+22+…+2h
Nivo Broj čvorova
n = ∑2j za j=0,h
0 20 = 1
n = 2h+1 – 1 1 21 = 2
Broj internih čvorova: 2h-1 2 22 = 4
Broj eksternih čvorova: 2h h=3 23 = 8
h=log2(n+1)-1 4
GOTOVO KOMPLETNO BINARNO STABLO
nivo Stablo S4
Gotovo kompletno ili gotovo 0
A
potpuno binarno stablo
dubine d je binarno stablo čiji svi
1
čvorovi ispunjavaju sledeća dva B C
uslova: 2
1. Svaki čvor u na nivou D M E F
manjem od d-1 ima dvoje dece
3
2. Svaki čvor u koji ima desnog G H I J K L
potomka na nivou d mora nivo
imati levo dete i sve leve Stablo S5
potomke kao listove na nivou 0
A
d ili mora imati dvoje dece
Primer 1: S4 je gotovo 1 B C
kompletno binarno stablo i to
striktno binarno stablo 2
D M E F
Primer 2: S5 je gotovo
kompletno binarno stablo ali nije 3 5
G H I J K
striktno binarno stablo
GOTOVO KOMPLETNO BINARNO STABLO
nivo Stablo S7
nivo Stablo S6 0 A
0
A 1 B C
1
B 2
C D M E F
2 3
D M G H K L
Nije gotovo kompletno binarno stablo
3 - Ispunjava uslov 1
G H
- Ne ispunjava uslov 2 (K je desni potomak
Nije gotovo kompletno binarno čvora A na nivou 3, a njegov levi potomak M je na
stablo nivou 2) nivo
- Ne ispunjava uslov 1 (ima listove na Stablo S8
0 A
nivoima 1,2 i 3)
1 B C
Gotovo kompletno binarno stablo
- Ispunjava oba uslova 2
D M E F
3 6
G H
MEMORIJSKA REPREZENTACIJA
BINARNOG STABLA - SEKVENCIJALNA
STABLO
Koristi se 1
Jednodimenzionalno polje 2
STABLO max dužine 2h+1-1 3
...
Promenljiva END koja pamti k čvor N
END 13
8
PRIMER (2)
STABLO
1 A
2 B
3 C
A 4
5
6 D
7
B C E
8
9
10
11
D E 12 F
13 G
14
15
F G
END 13
9
MEMORIJSKA REPREZENTACIJA BINARNOG
STABLA - LANČANA
B C ▲ B C
D ▲ E ▲
D E
▲ F ▲ ▲ G ▲
F G
11
PRIMITIVNE OPERACIJE
(p pokazivač na čvor nd)
1. info(p) vraća sadržaj čvora nd
2. left(p) vraća levo dete čvora nd
3. right(p) vraća desno dete čvora nd
Kompozitne operacije
1. Obilazak binarnog stabla
2. Formiranje binarnog stabla
3. Umetanje elementa u binarno stablo
4. Brisanje čvora iz binarnog stabla
5. Traženje elementa u binarnom stablu
6. Spajanje dva binarna stabla
7. ….
13
OBILAZAK STABLA
Kod obilaska binarnog stabla, svaki element se
posećuje samo jednom
Pri poseti jednog elementa/čvora stabla izvršavaju se
sve neophodne operacije (kopiranje sadržaja, prikaz,
evaluacija operatora i sl).
Vrste obilaska stabla
Preorder
Inorder A
Postorder
Level order (Obilazak po nivoima) B C
Implementacija
Rekurzivna D E F
Nerekurzivna
G H 14
OBILAZAK BINARNOG STABLA
Preorder Postorder
Obraditi koren Obići levo podstablo
Obići levo podstablo korena u postorder
korena u preorder redosledu
redosledu Obići desno podstablo
Obići desno podstablo korena u postorder
korena u preorder redosledu
redosledu Obraditi koren
ABC BCA
Inorder
Obići levo podstablo Obilazak po nivoima
korena u inorder redosledu Obilaze se čvorovi po
Obraditi koren nivoima, počev od nivoa 0
Obići desno podstablo tj. korena
korena u inorder redosledu ABC
BAC
A
15
B C
PRIMER OBILASKA BINARNOG STABLA
Preorder
A
ABDCEGFH
Inorder
B C DBAEGCFH
Postorder
DBGEHFCA
D F
E Po nivoima
ABCDEFGH
G H
Inorder
Obilazak sleva udesno
16
PREORDER OBILAZAK STABLA
Obilazak čvorova stabla na
sistematski način Algoritam S.1. Preorder obilazak
Čvor se obilazi pre svih preOrder(v)
njegovih potomaka
visit(v)
Primena: štampanje
struktuiranog dokumenta preorder (left(v))
preorder (right(v))
A 1
Brojevi 1,2,… označavaju
2 B C 4 redosled obilaska
čvorova
3 D E F 7
5 17
6 G H 8
PRIMER PREORDER OBILASKA
Visit = print
18
PREORDER I ARTIMETIČKI IZRAZI
Prefiks notacija izraza ((a+b)*(c-d))/(e+f)
19
NEREKURZIVNI PREORDER
Korišćenje magacina kao pomoćne strukture
mag
Algoritam S.2. Nerekurzivni preorder
preOrderN(koren)
1. um←1, mag[um] ← null, pok ← koren
//Inicijalizacija
2. repeat while (pok < > null)
3. visit (pok)
um
4. //da li postoji desno podstablo
5. if (right(pok) <> null)
desno dete
koren
6. then {//upis u mag
7. um ← um+1, mag[um] ← right(pok) }
pok - lokacija čvora koji se 8. //da li postoji levo podstablo
trenutno obrađuje
mag – pamti čvorove koje
9. if (left(pok) <> null )
treba kasnije obrađivati 10. then pok ← left(pok)
(desnu decu) 11. else {//čitanje iz magacina
um – vrh (ukazatelj) 12. pok ← mag[um], um ← um-1 } 20
magacina 13. endrepeat
14. end
ILUSTRACIJA RADA NEREKURZIVNOG
PREORDER OBILASKA
mag mag
ABEFIKCGH
A
um F um K
C C
B C
null null
ABE ABEFI
mag mag
E F G H
I K um H
null um null
ABEFIKCG ABEFIKCGH 21
POSTORDER OBILAZAK
Čvor se obilazi nakon Algoritam S.3: Postorder obilazak
obilaska njegovih potomaka postOrder(v)
postOrder (left(v))
Primena: izračunavanje
prostora koji se koristi za postOrder (right(v))
fajlove u direktorijumu i visit(v)
njegovim pod
direktorijumima A 8
Brojevi 1,2,… označavaju
2 B C 7 redosled obilaska
čvorova
1 D E F 6
4
G H 5 22
3
PRIMER POSTORDER OBILASKA
Visit = print
23
POSTORDER I ARTIMETIČKI IZRAZI
Postfiks notacija izraza ((a+b)*(c-d))/(e+f)
24
NEREKURZIVNI POSTORDER
Korišćenje Algoritam S.5. Nerekurzivni postorder
magacina kao postOrderN(koren)
pomoćne strukture
1. um ← 1, mag[um] ← null, pok ← koren //Inicijalizacija
A) Stablo se repeat while (pok < > null)
obilazi krajnjim 2.
um I
EIKFBGHCA um E
-F
-K
+F
Korak A) B B
A -C -C
A A
null null E
B C
E F G H um +K
F G
B -H
-C +C
I K A A EIKFB
EI null null 26
INORDER OBILAZAK STABLA
Čvor se obilazi nakon
obilaska njegovog levog Algoritam S.6. Inorder obilazak
podstabla i pre obilaska
desnog podstabla inOrder(v)
Primena: Crtanje inOrder (left (v))
binarnog stabla visit(v)
x(v) = inorder rang za v inOrder (right (v))
y(v) = dubina za v
6
3 5
27
PRIMER INORDER OBILASKA
Visit = print
28
INORDER PO PROJEKCIJI
(SQUISHING)
29
INORDER I ARTIMETIČKI IZRAZI
Infiksna notacija izraza ((a+b)*(c-d))/(e+f)
Da li su neophodne zagrade?
30
PRIMENA INORDER OBILASKA – PRIKAZ
ARITMETIČKIH IZRAZA
Specijalizacija inorder Algoritam S.7. Prikaz izraza
obilsaka printExpression(v)
Štampa operand ili
operator kod obilaska čvora if isInternal (v)
štampa “(“ pre obilaska
print(“(’’)
levog podstabla inOrder (left(v))
štampa “)“ posle obilska
desnog podstabla
print(info(v))
if isInternal (v)
+
inOrder (right(v))
print (“)’’)
EBIFKAGCH
E I
A
um B um F
A A
null null
B C
EB
E F G H
K G
um A C
null um null
EBIF EBIFKA
I K
33
OBILAZAK PO NIVOIMA
Obilazi stablo po Algoritam S.9. Obilazak po nivoima
nivoima, počev od levelOrderN(info, llink, dlink, koren)
0-tog, tj od korena pok ← koren
stabla while (pok <> null)
visit(pok)
Koristi pomoćnu
//dodaj u FIFO red sve potomke čvora
strukturu red red_enqueue(left(pok))
(FIFO) red_enqueue(right(pok))
//pročitaj iz reda
pok ← red_dequeue()
//dequeue treba da vraća null
// kada je red prazan
endwhile
end 34
ILUSTRACIJA RADA OBILASKA PO NIVOIMA
visit = print
35
OBILAZAK STABLA - PREGLED
39