Esercitazione 1. Possibile soluzione

Documenti analoghi
Modelli di Calcolo & Metodologie di Analisi

Alberi Binari Alberi Binari

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Algoritmi e Strutture Dati

Implementazione ADT: Alberi

Strutture dati Alberi binari

Albero Binario GT 7.3. interfacce di Positio<E>, Tree<E>, e BinaryTree<E>; il file TestLinkedBinaryTree.java

Algoritmi e strutture dati 16 Dicembre 2004 Canali A L e M Z Cognome Nome Matricola

Organigramma Gerarchia. (Tree) Nessuna persona può avere più di un superiore Ogni persona può essere superiore di altre

Esempio su strutture dati dinamiche: ArrayList

Alberi ( GT. 7 ) In informatica, un albero è un modello astratto con cui viene rappresentata una struttura gerarchica

Corso sul linguaggio Java

Corso sul linguaggio Java

Alberi binari e di ricerca. Parte 1 BST e GUI. Introduzione. 1. Minimo Antenato Comune. 2. Vistita in ampiezza

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Algoritmi e Strutture Dati. Lezione 3

Esercizi parte 3. La classe ArrayBinTree dovra implementare, tra le altre, l operazione seguente: padre: dato un nodo, restituire l indice del padre.

Alberi binari di ricerca

Alberi. Definizione, realizzazione e algoritmi elementari. Ugo de' Liguoro - Algoritmi e Sperimentazioni 03/04 - Lez. 7

Alberi Binario in Java

argomenti alberi terminologia tipo di dato astratto albero tipo astratto, implementazione, algoritmi es.: radice R con n sottoalberi radice

alberi tipo astratto, implementazione, algoritmi

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Programmazione 1 A.A. 2015/2016

PROGRAMMAZIONE 1 e LABORATORIO (A,B) - a.a Prova scritta del 10/01/2012 SOLUZIONI PROPOSTE

Alberi. Alberi: Esempio di utilizzo

Informatica 3. Informatica 3. LEZIONE 14: Alberi binari: introduzione. Lezione 14 - Modulo 1. Definizioni. Introduzione. Definizioni e proprietà

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

GRAFI. Angelo Di Iorio Università di Bologna

Albero in cui ogni nodo ha al più due figli. I figli di un nodo costituiscono una coppia ordinata

Esame di Algoritmi e Strutture Dati Corso di Laurea in Ingegneria Informatica Canali A-L, M-Z

Esercitazione su Albero Binario

Alberi ed Alberi Binari

Alberi e alberi binari I Un albero è un caso particolare di grafo

System.out.print("\tATTENZIONE: hi inserito un valore non valido!\n");

Alberi e alberi binari I Un albero è un caso particolare di grafo

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

GLI ALBERI BINARI DI RICERCA. Cosimo Laneve

Laboratorio di Programmazione 1 [Java]

Java, Oggetti e Strutture Dati di G. Callegarin - Edizioni CEDAM

Ripasso di programmazione ricorsiva

Informatica 3. LEZIONE 15: Implementazione di alberi binari - BST. Modulo 1: Implementazione degli alberi binari Modulo 2: BST

Algoritmi e Strutture Dati Laboratorio 20/10/2008. Prof. Pier Luca Lanzi

Introduzione Implementazione (1)

Sistemi operativi A, Unix+C, 26/09/2017. Nome: Cognome: Matricola:

Alberi binari ( 7.3)

Esercizi su programmazione ricorsiva 3

Strutture Dati Dinamiche

Divide et impera su alberi

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

Informatica 3. LEZIONE 17: Alberi generici. Modulo 1: Definizione e ADT Modulo 2: Implementazione Modulo 3: Alberi e classi di equivalenza

Linguaggi di Programmazione I Lezione 10

char *s; s = (char *) malloc(5*sizeof(char)); scanf( %s, s); Stringhe

Una definizione induttiva di albero binario astratto. Algoritmi e Laboratorio a.a Lezioni. Notazione lineare infissa per alberi binari.

se invoco un metodo di Object che è ridefinito in Point, viene invocato il metodo definito in Point

Informatica 3. Informatica 3. LEZIONE 17: Alberi generici. Lezione 17 - Modulo 1. Introduzione. ADT dell albero generico.

Programmazione a Oggetti Metodologie di Programmazione 14 Maggio 2012

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

Le liste. Le liste linkate

Algoritmi e Strutture Dati. Lezione 5

Esercizio laboratorio (Java 0) Raccolto stampato nel turno successivo di laboratorio

Esercitazione Fondamenti di informatica 2

Espressioni aritmetiche

Algoritmi e strutture dati 1 luglio 2004 Canali A L e M Z Cognome Nome Matricola

Esempio su strutture dati dinamiche: ArrayList

Laboratorio di Programmazione

COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni

Fondamenti di informatica 2 Claudio Biancalana. Esercitazione capitolo 19 Array

Algoritmi e Strutture di Dati A.A Esempio di prova scritta del 19 gennaio 2018 D.M CFU Libri e appunti chiusi Tempo = 2:00h

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

Alberi binari di ricerca

Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002. Sistemi Operativi Corsi A e B.

Algoritmi e Strutture Dati. Lezione 4

tipi di dato astratti

Esercitazione 15. Il problema dello Sleeping Barber

import java.io.*; double massa = 0.0; double velocità = 0.0; double coefficienteattrito = 0.0; int numeroveicoli = 0;

Heap e Code di Priorità

Insieme.java. Printed by Paolo. Feb 24, 04 16:44 Page 1/1 class Insieme { private int[] elementi; Tuesday February 24, /10

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Alberi ed Alberi Binari di Ricerca

Altri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012

COGNOME NOME MATRICOLA DATA

Realizzare un applicazione console che stampi la somma dei primi n numeri dispari oppure pari (a scelta dell operatore). import java.io.

Array. Definizione e utilizzo di vettori

Appunti senza pretese di P2+Lab: Pensare ricorsivamente, programmare iterativamente, parte II: Implementazione iterativa di Mergesort

import java.io.*; System.out.print("\tInserire il tasso di spesa: ");

Linguaggi di programmazione II AA 2010/2011 Esercitazione 2

Laboratorio di Programmazione 1 [Java]

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Alberi. In informatica, un albero è un modello astratto di una struttura dati gerarchica

Programmazione Orientata agli Oggetti in Linguaggio Java

Liste, Code, Pile. Problema

PROGRAMMAZIONE II canale A-D luglio 2008 TRACCIA DI SOLUZIONE

Transcript:

Esercitazione 1 1. Scrivere una classe Java BTreeNode per rappresentare nodi di alberi binari. Assumere che il contenuto informativo di ogni nodo sia rappresentato da un intero. 2. Fornire un implementazione ricorsiva della visita DFS di un albero binario. Realizzare un metodo main di prova, in cui viene creato a mano e visitato un albero binario (NB: visitare un nodo significa stamparne il contenuto informativo). 3. Servirsi dell implementazione del tipo Pila vista a lezione per realizzare una visita DFS iterativa. Confrontare l output con quello della versione ricorsiva. 4. Implementare tre metodi Java che, dato in input un albero binario, ne determinino rispettivamente il numero delle foglie, il numero dei nodi e la profondita. 5. Implementare un metodo che, dato in input un albero binario, determini se e completo.

Esercitazione 1 Possibile soluzione

Classe BTreeNode public class BTreeNode { int key; BTreeNode leftchild, rightchild;

Visita DFS ricorsiva public class BTree { BTreeNode root; //constructor... public BTree (BTreeNode r) { root=r; public void visitdfsric (BTreeNode n) { public void dfsricbtree () { visitdfsric (root); System.out.print ("\n"); if (n==null) return; //visits node... System.out.print (n.info+" "); //recursive calls... visitdfsric (n.leftchild); visitdfsric (n.rightchild);

Visita DFS ricorsiva: main di prova (1/2) public class ProvaDFSric { public static void main (String[] args) { (continua ) //creates nodes... BTreeNode a=new BTreeNode (); BTreeNode l=new BTreeNode (); BTreeNode b=new BTreeNode (); BTreeNode e=new BTreeNode (); BTreeNode r=new BTreeNode (); BTreeNode o=new BTreeNode (); //sets up tree... a.info='a'; l.info='l'; b.info='b'; e.info='e'; r.info='r'; o.info='o';

Visita DFS ricorsiva: main di prova (2/2) a.leftchild=l; a.rightchild=b; l.leftchild=e; l.rightchild=r; b.rightchild=o; BTree bintree=new BTree (a); //runs dfs... bintree.dfsricbtree ();

Implementazione del tipo Pila (1/3) public class MyStackNode { public class MyStack { public Object info; public MyStackNode next=null; private MyStackNode head; //constructor... public MyStack () { head=null; public boolean isempty () { return head==null; (continua )

Implementazione del tipo Pila (2/3) public Object top () { if (isempty ()) return null; else return head.info; public Object pop () { if (isempty ()) return null; Object el=head.info; head=head.next; return el; (continua )

Implementazione del tipo Pila (3/3) public void push (Object el) { MyStackNode mysn=new MyStackNode (); mysn.info=el; mysn.next=head; head=mysn;

Visita DFS iterativa public class BTree { BTreeNode root; //constructor... public BTree (BTreeNode r) { public void dfsiterbtree () { MyStack s=new MyStack (); root=r; s.push (root); while (!s.isempty ()) { BTreeNode u=(btreenode) s.pop (); if (u!=null) { //visits node... System.out.print (u.info+" "); s.push (u.rightchild); s.push (u.leftchild); System.out.print ("\n");

Visita DFS iterativa: main di prova (1/2) public class ProvaDFSIter { public static void main (String[] args) { (continua ) //creates nodes... BTreeNode a=new BTreeNode (); BTreeNode l=new BTreeNode (); BTreeNode b=new BTreeNode (); BTreeNode e=new BTreeNode (); BTreeNode r=new BTreeNode (); BTreeNode o=new BTreeNode (); //sets up tree... a.info='a'; l.info='l'; b.info='b'; e.info='e'; r.info='r'; o.info='o';

Visita DFS iterativa: main di prova (2/2) a.leftchild=l; a.rightchild=b; l.leftchild=e; l.rightchild=r; b.rightchild=o; BTree bintree=new BTree (a); //runs dfs... bintree.dfsiterbtree ();

Numero di foglie in un albero binario public class recmethods { public static int numleaves (BTreeNode r) { if (r==null) return 0; if (r.leftchild==null && r.rightchild==null) return 1; int left=numleaves (r.leftchild); int right=numleaves (r.rightchild); return left+right; (continua )

Numero di nodi in un albero binario public static int numnodes (BTreeNode r) { if (r==null) return 0; int left=numnodes (r.leftchild); int right=numnodes (r.rightchild); return left+right+1; (continua )

Profondita di un albero binario public static int finddepth (BTreeNode r) { if (r==null) return -1; int left=finddepth (r.leftchild); int right=finddepth (r.rightchild); if (left>right) return left+1; else return right+1; (continua )

Completezza di un albero binario public static boolean iscomplete (BTreeNode r) { int depth=finddepth (r); int leaves=numleaves (r); if (leaves==(int)math.pow ((double)2, (double)depth)) return true; else return false; (continua )

Main di prova public static void main (String[] args) { BTreeNode a=new BTreeNode(); BTreeNode b=new BTreeNode(); BTreeNode c=new BTreeNode(); BTreeNode d=new BTreeNode(); BTreeNode e=new BTreeNode(); BTreeNode f=new BTreeNode(); BTreeNode g=new BTreeNode(); BTreeNode h=new BTreeNode(); a.leftchild=b; a.rightchild=c; b.rightchild=d; b.leftchild=e; c.rightchild=f; c.leftchild=g; g.rightchild=h; System.out.println ("NumLeaves = + numleaves (a)); System.out.println ("NumNodes = + numnodes (a)); System.out.println ("Depth = + finddepth (a)); System.out.println ("iscomplete says: + iscomplete (a));