Esercitazioni di Prog. II (esercizi _aggiuntivi_su alberi binari) Chiara Petrioli
Si scriva una procedura Essere ‘giallo-verde’ Esercizio 8 /*Verifica se un albero e’ giallo verde. Per essere gialloverde ogni nodo giallo deve avere figli Verdi. Un nodo giallo ha il campo elem a 1 , un nodo Verde il campo elem a 0.*/ int gialloverde (ALBERO T) { int gv=1; if(T==NULL) return 1; else { if (T->elem==0) return (gialloverde(T->left)&&(gialloverde(T->right))); if (T->left!=NULL) gv=(T->left->elem==0); if(T->right!=NULL) gv=gv&&(T->right->elem==0); return(gv&&gialloverde(T->left)&&gialloverde(T->right))); } Si scriva una procedura Che dato un Albero binario Verifica se ha La proprieta’ di Essere ‘giallo-verde’ Qui farli ragionare un attimo sull’aritmetica dei puntatori
Si scriva una procedura Esercizio 9 /*calcola e memorizza nella locazione di memoria puntata da order l’iesimo order statistic ovvero l’i-esimo elemento piu’ piccolo in un albero binario di ricerca. L’indice dell’elemento piu’ piccolo da cercare e’inizialmente memorizzato nella posizione di memoria puntata da i*/ void orderstatistic(ALBERO T,int *i,int *order) { if (T!=NULL) if (T->left) orderstatistic(T->left,i,order); if (*i==1) *order=T->elem; return; } * i= * i-1; If((*i>0)&&(T->right)) orderstatistic(T->right,i,order); Si scriva una procedura che dato un albero binario di ricerca calcoli l’i-esimo order statistic Qui farli ragionare un attimo sull’aritmetica dei puntatori
Si scriva una procedura Esercizio 10 /*Post:verifica se un albero binario e’ un albero binario di ricerca*/ struct max_min { int max; int min; }; typedef struct max_min MAXMIN; typedef MAXMIN* MAX_MINPTR; struct risposta int binricerca; MAX_MINPTR maxmin; } typedef struct risposta RISPOSTA; typedef RISPOSTA * RISPOSTAPTR; Si scriva una procedura Che dato un Albero binario Verifichi che sia Un albero binario Di ricerca Qui farli ragionare un attimo sull’aritmetica dei puntatori
Si scriva una procedura Esercizio 10 RISPOSTAPTR verificabinricerca (ALBERO T) { RISPOSTAPTR temp,temp1,temp2; int t1,t2; ALBERO temp; if (T==NULL) temp=malloc(sizeof(RISPOSTA)); temp->binricerca=1; temp->maxmin=NULL; return temp; } Si scriva una procedura Che dato un Albero binario Verifichi che sia Un albero binario Di ricerca Qui farli ragionare un attimo sull’aritmetica dei puntatori
Esercizio 10bis { temp1=verificabinricerca(T->left); else { temp1=verificabinricerca(T->left); temp2=verificabinricerca(T->right); temp=malloc(sizeof(RISPOSTA)); t1=((temp1->maxmin==NULL)||(temp1->maxmin->max<=T->elem)); t2=((temp2->maxmin==NULL)||(temp2->maxmin->min>=T->elem)); temp->binricerca=temp1->binricerca && temp2->binricerca &&t1 &&t2; temp->maxmin=malloc(sizeof(MAXMIN)); temp->maxmin->max=T->elem; temp->maxmin->min=T->elem; if ((T->left)&&(temp1->maxmin->max>T->elem)) temp->maxmin->max=temp1->maxmin->max; if ((T->right)&&(temp2->maxmin->max > temp->maxmin->max)) temp->maxmin->max=temp2->maxmin->max; if ((T->left)&&(temp1->maxmin->min<T->elem)) temp->maxmin->min=temp1->maxmin->min; if ((T->right)&&(temp2->maxmin->min < temp->maxmin->min)) temp->maxmin->min=temp2->maxmin->min; return temp; } Qui farli ragionare un attimo sull’aritmetica dei puntatori