Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJosé Justo Modificado hace 11 años
1
1.Scrivere una funzione che dato un albero binario di ricerca stampi nell'ordine i valori dell'albero compresi tra due interi a e b (si assuma a <= b) 2.Scrivere una funzione che dato un ABR T2 verifichi se esso è un sottoalbero dell'ABR di T1. –2.1 Non ammettendo duplicati in T1 –2.2 Ammettendo duplicati in T1 NOTA: scrivere sempre pre e post condizione di ogni funzione Esercizi su alberi binari di ricerca
2
Esercizio 1 Scrivere una funzione che dato un albero binario di ricerca stampi nell'ordine i valori dell'albero compresi tra due interi a e b (si assuma a <= b) Pre condizioni: La funzione prende in ingresso un albero binario di ricerca e i due interi Variante dell'esercizio: restituire una lista contenente i valori nell'ordine compresi tra a e b
3
Implementazione void intervallo( tree *t, int a, int b ) { if (t == NULL) return; if (t->el >= a) intervallo(t->sx, a, b); if (t->el >= a && t->el el); if (t->el dx, a, b); }
4
Esercizio 2 Scrivere una funzione che dato un ABR T2 verifichi se esso è un sottoalbero dell'ABR di T1. –2.1 Non ammettendo duplicati in T1 –2.2 Ammettendo duplicati in T1 Pre condizioni: La funzione prende in ingresso due alberi binari di ricerca T1 e T2, eventualmente vuoti Post condizioni: La funzione restituisce 1 T2 è un sottoalbero di T1, 0 altrimenti. Nel caso 2.1, si assume che T1 non contenga duplicati.
5
Implementazione Es. 2.1 /* effettua la ricerca del nodo radice e quindi chiama verifica per controllare se t2 è sottoalbero di t1 */ int sottoalb( tree *t1, tree *t2 ) { if ( t1 == NULL && t2 == NULL ) return 1; if ( t1 == NULL || t2 == NULL ) return 0; if (t1 ->el > t2->el) return sottoalb(t1->sx, t2); if (t1 ->el el) return sottoalb(t1->dx, t2); /* t1->el == t2->el */ return verifica(t1->sx, t2->sx) && verifica(t1->dx, t2->dx); } /* controlla se t2 è un sottoalbero di t1 */ int verifica(tree *t1, tree *t2) { if (t1==NULL && t2==NULL) return 1; if (t1 == NULL) return 0; return t1->el == t2->el && verifica(t1->sx, t2->sx) && verifica(t1->dx, t2->dx); }
6
Implementazione Es. 2.2 int sottoalb( tree *t1, tree *t2 ) { if ( t1 == NULL && t2 == NULL ) return 1; if ( t1 == NULL || t2 == NULL ) return 0; if (t1 ->el > t2->el) return sottoalb(t1->sx, t2); if (t1 ->el el) return sottoalb(t1->dx, t2); /* t1->el == t2->el */ return (verifica(t1->sx, t2->sx) && verifica(t1->dx, t2- >dx)) || sottoalb(t1->sx, t2) || sottoalb(t1->dx, t2); }
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.