Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

UNIVERZITET U BEOGRADU

MAŠINSKI FAKULTET

ALGORITMI I STRUKTURE PODATAKA

asistent Maja Rosić

mrosic@mas.bg.ac.rs
STABLA
 Stabla su nelinearne strukture podataka.

 Memorijska reprezentacija:

 ulančana (češće)

 sekvencijalna.

2
STABLA
 Sastoje se od čvorova:

 prvi čvor u stablu naziva se koren stabla,

 poslednji čvorovi nazivaju se listovi.


koren
10

8 15

4 9 20
listovi
3
BINARNA STABLA
 Čvorovi su uvek u relaciji roditelj – dete.
 Binarno stablo je vrsta stabla gde svaki čvor ima
najviše dva deteta.

10

8 15

4 9 15 20
4
Tipične operacije nad stablima su:

 Dodavanje (add),

 Brisanje stabla (removeTree),

 Pretraživanje (search),

 Obilazak stabla (preOrder, inOrder, postOrder).

5
Definisanje čvora stabla

class Node:
def __init__(self, broj):
self.broj = broj
self.left = None
self.right = None

6
1
Operacija dodavanja
2
elementa add
from node import Node if __name__ == '__main__':
tree = Tree()
class Tree:
def __init__(self): tree.add(10)
self.root = None tree.add(8)
tree.add(15)
def add(self, broj): tree.add(4)
novi = Node(broj) tree.add(2)
if self.root is None:
self.root = novi
return

roditelj = None
tekuci = self.root

while tekuci is not None:


roditelj = tekuci

if broj <= tekuci.broj:


tekuci = tekuci.left
else:
tekuci = tekuci.right

if broj <= roditelj.broj:


roditelj.left = novi
else:
roditelj.right = novi 7
Pretraživanje
1
nekog broja
3
u stablu
from node import Node
if __name__ == '__main__':
def __init__(self): tree = Tree()
self.root = None
tree.add(10)
def search(self, x): tree.add(8)
tekuci = self.root tree.add(15)
tree.add(4)
while tekuci is not None: tree.add(2)
if tekuci.broj == x:
return True if tree.search(4):
print("Nasao broj")
if x <= tekuci.broj: else:
tekuci = tekuci.left print("Nije nasao
else: broj")
tekuci = tekuci.right
 Napomena:
return False Funkcija
def add(self, broj):
je prethodno definisana.
8
Operacija brisanja stabla removeTree
from node import Node

class Tree:
def __init__(self):
self.root = None

def removeTree(self):
self.root = None # garbeage collector will collect and remove
all other nodes from memory

if __name__ == '__main__':
tree = Tree()

tree.add(10)
tree.add(8)
tree.add(15)
 Napomena:
tree.add(4)
Funkcija
tree.add(2) def add(self, broj):
je prethodno definisana.
tree.removeTree()
9
Obilazak stabla

preOrder inOrder postOrder


10 10 10

8 15 8 15 8 15

4 9 12 20 4 9 12 20 4 9 12 20

10 8 4 9 15 12 20 4 8 9 10 12 15 20 4 9 8 12 20 15 10

10
Operacija obilaska stabla
1
from node import Node

class Tree:
def __init__(self):
self.root = None

if __name__ == '__main__':
tree = Tree()

tree.add(10)
tree.add(8)
tree.add(15)
tree.add(4)
tree.add(2)

tree.preOrder(tree.root)
print('-----------------')
 Napomena:
tree.inOrder(tree.root)
print('-----------------') Funkcija
def add(self, broj):
tree.postOrder(tree.root)
je prethodno definisana.
11
Obilazak stabla preOrder
2
def preOrder(self, node):

if node is not None:


print(node.broj)
self.preOrder(node.left)
self.preOrder(node.right)

12
Obilazak stabla inOrder
2
def inOrder(self, node):

if node is not None:


self.inOrder(node.left)
print(node.broj)
self.inOrder(node.right)

13
Obilazak stabla postOrder
2
def postOrder(self, node):

if node is not None:


self.postOrder(node.left)
self.postOrder(node.right)
print(node.broj)

14

You might also like