La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

esercizi alberi binari

Presentazioni simili


Presentazione sul tema: "esercizi alberi binari"— Transcript della presentazione:

1 esercizi alberi binari
int numNodi(TreePtr tPtr) /* Postc: restituisce il numero dei nodi di tPtr */ {if (!tPtr ) return 0; return numNodi(tPtr->left) + numNodi(tPtr->right) + 1; } int alt(TreePtr tPtr) /* Postc: restituisce l’altezza di tPtr */ {if (!tPtr ) return -1; return max(alt(tPtr->left),alt(tPtr->right)) + 1;

2 Versione “quasi tail recursive”, :il calcolo del numero dei nodi
void numNodi2(TreePtr tPtr, int* num) /* num inizialmente deve esser 0 Postc: calcola in num il numero dei nodi di tPtr */ {if (!tPtr ) return; (*num)++; numNodi2(tPtr->left,num); numNodi2(tPtr->right,num);} N.B. “quasi tail recursive” è qui usato per identificare il caso in cui la funzione non ha chiamate in sospeso i cui valori devono essere combinati all’uscita. Per la versione iterativa equivalente serve comunque la gestione di una pila

3 Versione “quasi tail recursive”: il calcolo dell’altezza
void alt2(TreePtr tPtr, int liv,int *altmax) /* inizialmente liv = 0 e *altmax =-1; Postc: calcola in altmax l’altezza di tPtr */ { if (!tPtr) return; if (foglia(tPtr)) *altmax = max(*altmax,liv); alt2(tPtr->left,liv+1,altmax); alt2(tPtr -> right, liv+1,altmax); }

4 le funzioni ausiliarie
int max(int n,int m); int max(int n,int m) {if (n<m) return m; else return n;} int foglia(TreePtr tPtr); int foglia(TreePtr tPtr) { if (!tPtr ->left && !tPtr->right) return 1; else return 0;}


Scaricare ppt "esercizi alberi binari"

Presentazioni simili


Annunci Google