Laboratorio di sistemi Strutture dati ricorsive Java Vogliamo

Laboratorio di sistemi
Strutture dati ricorsive
Java
Vogliamo rappresentare la seguente struttura dati (un albero genealogico, a sinistra è
riportato il padre, a destra la madre) con un programma Java
I nomi dei reference sono le lettere dell'alfabeto (si comincia dal basso a sinistra).
/*
* Nodo.java
*
* Creato il 1 dicembre 2007, 19.27
*
*
*/
package alberojavaapp;
/**
*
* @author maurizio
*/
public class Nodo {
// rappresenta il nodo di partenza
static Nodo start;
String anagrafica;
// la definizione è ricorsiva
// left rappresenta il padre
Nodo left;
// right la madre
Nodo right;
/** Crea una nuova istanza di Nodo */
public Nodo() {
}
albero_genealogico.pdf
Pag. 1/4
Cozzetto ©
Laboratorio di sistemi
}
Strutture dati ricorsive
Java
public Nodo(String anagrafica, Nodo left, Nodo right) {
this.anagrafica = anagrafica;
this.left = left;
this.right = right;
/** stampa un nodo nell'ordine Sinistra, Destra, Radice */
static void stampaNodoSDR(Nodo nodo) {
if (nodo == null)
return;
// sinistra
stampaNodoSDR(nodo.left);
// destra
stampaNodoSDR(nodo.right);
// radice
System.out.println(nodo.anagrafica);
}
/** stampa un nodo nell'ordine Radice, Sinistra, Destra */
static void stampaNodoRSD(Nodo nodo) {
if (nodo == null)
return;
// radice
System.out.println(nodo.anagrafica);
// sinistra
stampaNodoRSD(nodo.left);
// destra
stampaNodoRSD(nodo.right);
}
/** stampa un nodo nell'ordine Sinistra, Radice, Destra */
static void stampaNodoSRD(Nodo nodo) {
if (nodo == null)
return;
// sinistra
stampaNodoSRD(nodo.left);
// radice
System.out.println(nodo.anagrafica);
// destra
stampaNodoSRD(nodo.right);
}
} // fine classe Nodo
albero_genealogico.pdf
Pag. 2/4
Cozzetto ©
Laboratorio di sistemi
Strutture dati ricorsive
Java
/*
* Main.java
*
* Creato on 1 dicembre 2007, 19.27
*
*/
package alberojavaapp;
/**
*
* @author maurizio
*/
public class Main {
/** Crea una nuova istanza di Main */
public Main() {
}
/**
* @param args gli argomenti della riga di comando
*/
public static void main(String[] args) {
// nodi terminali (foglie)
Nodo a = new Nodo("Cosimo", null, null);
Nodo b = new Nodo("Marina", null, null);
Nodo c = new Nodo("Giuseppina", null, null);
Nodo d = new Nodo("Antonio", null, null);
Nodo e = new Nodo("Salvatore", null, null);
Nodo f = new Nodo("Gemma", null, null);
Nodo g = new Nodo("Paolo", null, null);
Nodo h = new Nodo("Maria", null, null);
// vado su di un livello
Nodo i = new Nodo("Antonio", a, b);
Nodo l = new Nodo("Maria", c, d);
Nodo m = new Nodo("Pierina", e, f);
Nodo n = new Nodo("Alessandro", g, h);
// ancora su di un livello
Nodo o = new Nodo("Maurizio", i, l);
Nodo p = new Nodo("Gerardina", m, n);
// la radice dell'albero
Nodo q = new Nodo("Martina", o, p);
// comunichiamo quale è il nodo di partenza
Nodo.start = q;
albero_genealogico.pdf
Pag. 3/4
Cozzetto ©
Laboratorio di sistemi
}
Strutture dati ricorsive
Java
// stampiamo l'albero secondo lo schema SRD
Nodo.stampaNodoSRD(Nodo.start);
}
Esecuzione
Cosimo
Antonio
Marina
Maurizio
Giuseppina
Maria
Antonio
Martina
Salvatore
Pierina
Gemma
Gerardina
Paolo
Alessandro
Maria
BUILD SUCCESSFUL (total time: 0 seconds)
albero_genealogico.pdf
Pag. 4/4
Cozzetto ©