La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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)

Presentaciones similares


Presentación del tema: "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)"— Transcripción de la presentación:

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


Descargar ppt "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)"

Presentaciones similares


Anuncios Google