stablo - ipaq petaipaq.petagimnazija.hr/wp-content/uploads/2014/12/stablo.pdf · stablo (tree)...

15
Stablo

Upload: others

Post on 26-Oct-2019

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Stablo

Page 2: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Uvod

Za razliku od stoga i reda koji su linearne

strukture, stablo je hijerarhijska struktura

podataka

U takvoj strukturi jedan element ima više

elemenata koji iz njega slijede

Elemente stabla nazivamo čvorovima

Među čvorovima postoje određene

veze

Page 3: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Stablo (Tree)

korijen – prvi čvor u stablu

korijen je poveznicama spojen s jednim ili više djece

susjedi – djeca istog čvora

list – čvor koji nema djece

unutarnji čvor – čvor koji ima najmanje jedno dijete

dubina stabla – udaljenost korijena do najudaljenijeg lista

binarno stablo – svaki čvor ima najviše dvoje djece

potpuno binarno stablo – stablo kod kojeg svi čvorovi osim listova imaju dvoje djece

Page 4: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Binarno stablo (Binary Tree)

razina 0

razina 1

razina 2

razina 3

A

B C

D E

F

Page 5: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Stablo (Tree)

Page 6: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Obilasci stabla

postupak obilaženja svih čvorova stabla

preorder : korijen – lijevo – desno

inorder : lijevo – korijen – desno

postorder : lijevo – desno - korijen

Page 7: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Obilasci stabla – primjer 4

Sljedeće binarno stablo obiđimo

preorder, inorder te postorder metodom

razina 0

razina 1

razina 2

razina 3

A

B C

D E

F

Preorder: ABCDEF

Inorder: BADCFE

Postorder: BDFECA

Page 8: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Binarno stablo (Binary Tree) - Implementacija

class BTree:

def __init__(self, k, l = None, d = None):

self.Korijen = k

self.Lijevo = l

self.Desno = d

return

def preorder(self):

s = self.Krijen

if self.Lijevo != None:

s += self.Lijevo.preorder()

if self.Desno != None:

s += self.Desno.p

return s

Page 9: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Binarno stablo – primjer 5

Koristeći kreiranu klasu kreirajmo binarno stablo kao na slici a potom ispišimo vrhove onim redoslijedom kako bismo ih obišli metodom preorder

A

B C

D E

F

>>> f = BTree('F')

>>> e = BTree('E', l = f)

>>> d = BTree('D')

>>> e = BTree('C', l = d, d = e)

>>> d = BTree('B')

>>> s = BTree('A', l = d, d = e)

>>> s.preorder()

'ABCDEF'

Page 10: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Rekonstrukcija binarnog stabla iz obilazaka

inorder + još jedan obilazak (preorder ili

postorder)

prvi znak iz preorder obilaska (posljednji

iz postorder) – korijen stabla

Sljedeći znak – lijevo ili desno dijete

(ovisi o poziciji u inorder obilasku)

Page 11: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Rekonstrukcija stabla – primjer 6

Rekonstruirajmo binarno stablo ako su dani njegovi sljedeći obilasci:

Preorder: ABCDEF

Inorder: BADCFE

A

B C

D E

F

Page 12: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Rekonstrukcija binarnog stabla -

Implementacija

def rekonstrukcija(preorder, inorder):

t = BTree(preorder[0])

for c in preorder[1:]:

r = t; tmp = BTree(c); dodan = False

while not dodan:

if inorder.index(tmp.K) < inorder.index(r.K):

if r.Lijevo != None:

r = r.Lijevo

else:

r.Lijevo = tmp; dodan = True

else:

if r.Desno != None:

r = r.Desno

else:

r.Desno = tmp; dodan = True

return t

Page 13: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Binarno stablo traženja

Svi čvorovi lijevo od nekog čvora imaju

vrijednost koja je manja ili jednaki od

vrijednosti čvora

Svi čvorovi desno od nekog čvora imaju

vrijednost veću ili jednaku od vrijednosti

čvora 3

1 5

2 4 6

Page 14: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Binarno stablo traženja - kreiranje

r – niz znakova

prvi znak = korijen

uzimamo redom jedan po jedan znak

te ga postavljamo u stablo tako da

stablo zadrži svojstvo binarnog stabla

traženja

Page 15: Stablo - IPAQ PETAipaq.petagimnazija.hr/wp-content/uploads/2014/12/Stablo.pdf · Stablo (Tree) korijen – prvi čvor u stablu korijen je poveznicama spojen s jednim ili više djece

Binarno stablo traženja – primjer 7

Kreirajmo binarno stablo traženja za riječ STABLO

S

A T

B

L

O