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 ©