2. Riferimenti
•
•
2
Bertossi Alan A., Montresor Alberto. “Algoritmi e
strutture di dati” (seconda edizione), CittàStudi 2010
Stanley B. Lippman, Barbara E. Moo, Josee Lajoie
“C++ Primer”, 5th Edition Addison-Wesley
Prof. Pier Luca Lanzi
3. Alberi Radicati
•
•
3
Albero (definizione informale): insieme dinamico i cui
elementi hanno relazioni di tipo gerarchico
Albero (definizione ricorsiva)
Insieme vuoto
Una radice T e 0 o più sottoalberi, con la radice di ogni
sottoalbero collegata a T da un arco (orientato)
Prof. Pier Luca Lanzi
7. Alberi Radicati Binari
•
•
7
Un albero binario è un albero ordinato in cui ogni nodo ha al più due
figli e si fa distinzione tra il figlio sinistro ed il figlio destro di un nodo
Nota: due alberi T e U aventi gli stessi nodi, gli stessi figli per ogni
nodo e la stessa radice, sono distinti qualora un nodo u sia designato
come figlio sinistro di un nodo v in T e come figlio destro del
medesimo nodo in U
Prof. Pier Luca Lanzi
9. Alberi Radicati
•
•
•
•
9
Profondità di un nodo: la
lunghezza del percorso
dalla radice al nodo
(numero archi attraversati)
Livello: l'insieme dei nodi
alla stessa profondità
Altezza dell'albero:
massima profondità+1
Grado di un nodo:
numero dei figli
Prof. Pier Luca Lanzi
10. Alberi Binari: Pieni e Completi
•
•
10
Alberi binari pieni: Ogni nodo è una foglia oppure è un
nodo interno con esattamente due figli non vuoti
Alberi binari completi: se l’altezza dell’albero è d, allora
tutte le foglie eccetto possibilmente il libello d sono
completamente piene. L’ultimo livello ha tutti i nodi sul lato
sinistro
Prof. Pier Luca Lanzi
16. Realizzazione con Vettore dei Padri
•
16
L'albero è rappresentato da un vettore i cui elementi
contengono l'indice del padre
0 a
T
1 b
a
1 e
b
2 c
2 d
c
3 f
3 g
Prof. Pier Luca Lanzi
e
d
f
g
18. Algoritmi di Visita degli Alberi
•
•
•
18
Visita (o attraversamento) di un albero:
Algoritmo per “visitare” tutti i nodi di un albero
In profondità (depth-first search, a scandaglio): DFS
Vengono visitati i rami, uno dopo l’altro
Tre varianti: pre-ordine, post-ordine, in-ordine
In ampiezza (breadth-first search, a ventaglio): BFS
A livelli, partendo dalla radice
Prof. Pier Luca Lanzi
20. Visita in Ampiezza
VisitaAmpiezza(T)
q = new Queue()
q.insert(T)
while not q.empty() do
p := q.dequeue()
visita p
q.enqueue(p.left())
q.enqueue(p.right())
Prof. Pier Luca Lanzi
20
21. Esercizi
•
•
21
Stampare il risultato della
Visita in pre-ordine
Visita in-ordine
Visita in post-ordine
Visita in ampiezza
Scrivere un algoritmo per
Calcolare l’altezza di un albero binario T
Calcolare il numero di nodi di un albero binario T
Stampare tutti i nodi di profondità h di un albero binario
T
Prof. Pier Luca Lanzi
24. Esercizi
•
•
•
24
Dato un albero radicato T, calcolare la sua altezza
Dato un albero radicato T, calcolare il numero totale di
nodi
Dato un albero radicato T, stampare tutti i nodi a
profondità h
Prof. Pier Luca Lanzi