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 );