Esercitazione 4
Alberi n-ari
Corso di Fondamenti di Informatica II
BIAR2 (Ing. Informatica e Automatica) e BSIR2 (Ing. dei Sistemi)
A.A. 2010/2011
19 Novembre 2010
Sommario
Scopo della esercitazione è quello di realizzare una struttura dati
per gestire gli alberi n-ari ed implementare semplici algoritmi di visita.
1
Rappresentazione di un albero n-ario
Un albero n-ario è una struttura dati che permette di rappresentare un generico albero in cui ad ogni nodo è associato un valore e che ha 0 o più nodi
gli. Ogni nodo ha un riferimento al parent (genitore), un campo element
(info) che contiene un valore (del tipo appropriato) e una lista di riferimenti
ai nodi gli.
Figura
Gracamente, il generico nodo dell'albero è rappresentato in
??.
Ci ri siferisca per i dettagli al libro adottato nel Corso Fondamenti di
Informatica 2 (Algoritmi) - Fabrizio D'Amore [?].
Programma Java.
e
TreeNode<E>
Si vogliono implementare le due classi Java
di tipo generico che rappresentano rispettivamente un al-
bero n-ario ed un suo generico nodo.
mentare l' interfaccia
classe
MyTree<E>
Tree<E>
La classe
MyTree<E>
dovrà imple-
(fornita nel materiale di supporto) mentre la
TreeNode<E> dovra' implementare l'interfaccia Position<E> (anch'es-
sa disponibile nel materiale di supporto).
1
Figura 1: Generico nodo di un albero n-ario.
2
Creazione e popolamento di alberi n-ari
Dopo aver realizzato le classi per rappresentare l'albero occorre eettuare dei
test per vedere se i dati vengono inseriti in maniera corretta.
Programma Java.
Si vuole realizzare una classe
MyTest con un main per
il test della rappresentazione in cui creare un albero, inserire alcuni valori di
prova e poi stamparlo con il metodo stampa della classe
TreeUtil
nel materiale di supporto). Un possibile main di prova è il seguente:
public
static
v o i d main ( S t r i n g [ ]
MyTree<I n t e g e r > t
args )
= new MyTree<I n t e g e r >() ;
P o s i t i o n <I n t e g e r > r o o t
= t . setRoot (100) ;
P o s i t i o n <I n t e g e r > c
= root . addChildren (20) ;
final
P o s i t i o n <I n t e g e r > c h i l d = r o o t . a d d C h i l d r e n ( 2 3 0 ) ;
c h i l d . addChildren ( 1 ) ;
c h i l d . addChildren ( 2 ) ;
c h i l d . addChildren ( 3 ) ;
c . addChildren ( 4 ) ;
T r e e U t i l . stampa ( t ) ;
2
(fornita
3
Visita di alberi n-ari
Per visita di un albero n-ario si intende l'operazione di accedere a tutti i suoi
nodi eseguendo o meno operazioni su di essi, ad esempio stampandone il valore o inserendoli in un insieme. Ci sono diversi tipi di visita dipendentemente
dall'ordine con cui i nodi vengono visitati.
Programma Java.
Si vuole modicare la classe
MyTree<E>
aggiungendo
i seguenti metodi di istanza.
public
void
printPreorder ()
Stampa i nodi dell'albero in preordine.
public
L i s t <E> p o s t o r d e r ( )
Restituisce una lista degli elementi dell'albero in postordine.
4
Visita di alberi n-ari con calcolo di proprietà
La visita di un albero può essere l'operazione di base quando il task è calcolare
una particolare proprietà di un albero n-ario, e può essere opportuno (o
necessario) utilizzare un tipo di visita piuttosto che un altro.
Programma Java.
Si vuole modicare la classe
MyTree<E>
aggiungendo
i seguenti metodi di istanza.
public
int
size ()
Restituisce il numero di nodi dell' albero.
public
int
depth
()
Restituisce la profondità dell' albero.
public
int
maxBranchingFactor
()
Restituisce il massimo del numero di gli di un nodo (branching factor).
3
Programma Java (per casa).
Si vuole modicare la classe
MyTree<E>
aggiungendo i seguenti metodi di istanza.
public
int
c o n t a O c c o r r e n z e (E e l e m e n t )
Ritorna il numero di occorrenze di element all'interno dell'albero
Parametri.
• element:
public
elemento da cercare
L i s t <E> r e s t i t u i s c i L i v e l l o ( i n t
l)
Ritorna l'insieme di tutti gli elementi dei nodi che si trovano a livello l
Parametri.
• l:
livello
Suggerimento.
Per realizzare i metodi precedenti è consigliabile ricorrere
a metodi privati di supporto in modo da poter aggiungere eventuali parametri
aggiuntivi rispetto a quelli indicati nelle signature dei metodi. Ovviamente
dovrà essere tali metodi aggiuntivi dovranno essere privati e non accessibili
dall'esterno ed utilizzati solo all'interno della classe.
4
Scarica

Esercitazione 4 Alberi n-ari - Dipartimento di Informatica e Sistemistica