Strumenti Utente

Strumenti Sito


fisica:informatica:201415:esercitazioni:esercitazione12

Questa è una vecchia versione del documento!


Esercitazione alberi

Esercizio 1

Definire il tipo albero_s_t di un albero binario in cui le etichette sono stringhe di al piu' 20 caratteri. Scrivere una funzione

int conta_occorrenze ( albero_s_t * root, char * s );

che conta le occorrenze della stringa s nell'albero di radice root e restituisce tale numero.

Esercizio 2

Definire il tipo albero_d_t di un albero binario in cui le etichette sono valori di tipo double. Scrivere una funzione

double somma_le_foglie ( albero_d_t * root);

che restituisce la somma dei valori delle etichette delle sole foglie dell'albero.

Esercizio 3

Utilizzando il tipo albero_d_t dell'esercizio precedente. Scrivere una funzione

albero_d_t * leggi_albero ( void );

che legge da standard input una sequenza di valori double terminata da EOF e restituisce il puntatore ad un nuovo albero ce contiene tutti i valori letti. L'albero deve essere costruito in modo da essere ordinato, cioe' dato un nodo n tutti i valori nel sottoalbero sinistro devono essere minori o uguali del valore in n, mentre i valori nel sottoalbero destro devono essere tutti maggiori o uguali di n.

Verificare che stampando i valori delle etichette con una visita simmetrica otteniamo una sequenza crescente.

Esercizio 4

Utilizzando il tipo albero_d_t dell'esercizio precedente, scrivere una funzione che trasforma l'albero in una lista di double inserendo le etichette nell'ordine della visita anticipata

lista_d_t * tree_to_list ( albero_d_t * root );

Esercizio 5: Alberi binari di ricerca

Un albero binario di ricerca e' un albero in cui in ogni nodo nn e' verificata la relazione E(nsx)E(n)E(ndxE(nsx)E(n)E(ndx dove nsxnsx e' un qualsiasi nodo dell'albero di sinistra e ndxndx e' un qualsiasi nodo dell'albero di destra. Utilizzando il tipo albero_d_t realizzate le seguenti funzioni:

/* inserisce l'etichetta x nell'albero mantenedolo ordinato, restituisce il puntatore al nuovo albero */
albero_d_t* inserisci_ord ( albero_d_t * root, double x );
/* ricerca l'etichetta x nell'albero analizzando un numero di nodi pari all'altezza dell'albero 
 restituisce 1 se la trova e 0 se non la trova */
int inserisci_ord ( albero_d_t * root, double x );
/* cancella l'etichetta x nell'albero mantenedolo ordinato e deallocando l'etichetta (difficile!) */
albero_d_t* cancella_ord ( albero_d_t * root, double x );
fisica/informatica/201415/esercitazioni/esercitazione12.1431508833.txt.gz · Ultima modifica: 13/05/2015 alle 09:20 (10 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki