Laboratorio di Programmazione - A.A. 2004/05

Alberi n-ari

Parte 1

Un albero n-ario è definito e formato da un nodo radice che puo' avere 0, 1 o più sottoalberi n-ari come figli (nota l'albero vuoto non e' considerato significativo).

Definire la classe Albero con le seguenti funzioni:

Parte 2

Realizzare una classe VisitaAlberi contenente tre metodi statici che implementino rispettivamente le procedure di visita in preordine, in postordine e per livelli di un albero n-ario, effettuando la stampa delle informazioni nei nodi.

Parte 3

La rappresentazione parentetica di un albero n-ario può essere definita come segue:

Alb ->  ( e Alb1 ... Albn )

dove e e' l'informazione sulla radice e Alb1 ... Albn (n >= 0) sono a loro volta alberi.

Esempio:

(A (B (C) (D) (E)) (F) (G) (H (I)))

Una grammatica non ambigua per rappresentare tali espressioni è

A -> ( B
B -> i C
C -> ) | ( B C

dove i simboli (, ) e i sono simboli terminali (in particolare i è l'informazione del nodo), e A, B, C sono simboli non terminali. Questa grammatica consente la definizione di un metodo ricorsivo per l'analisi di una stringa contenente la rappresentazione parentetica di un albero n-ario e la corrispondente costruzione.

Realizzare una classe UtilitaAlberi contenente due metodi statici:

Per l'analisi della stringa contenente la rappresentazione parentetica di un albero si faccia uso della classe TokenIterator.java.