Cr4m3
12-04-2005, 19:53
Salve a tutti, è la prima volta che posto qui, volevo un vostro consiglio su queste due funzioni, dato che abbiamo avuto una discussione con un mio amico sulla loro fattibilità.
Secondo voi sono giuste?
Grazie mille per le risposte.
P.S. Scusate se non ci sono commenti, cmq il codice dovrebbe essere chiaro
/----------/
Si definisca una funzione ricorsiva C che restituisce 1 se il primo dei due alberi in input e' un sottoalbero del secondo, 0 altrimenti. La funzione ha il seguente prototipo: int subTree(treePtr T, treePtr U). (Suggerimento: si usi una funzione d'appoggio per testare l'uguaglianza di alberi).
int alberiuguali(TreePtr A,TreePtr B)
{
/*PostC: Restituisce 1 se l'albero A è uguale all'albero B, restituisce 0
quando trova un valore di A diverso da quello di B;*/
if(A==NULL && B==NULL) return 1;
if(!A) return 0;
if(!B) return 0;
if(A->info == B->info)
{
alberiuguali(A->lPtr,B->lPtr);
alberiuguali(A->rPtr,B->rPtr);
}
else
return 0;
}
int subTree(TreePtr T, TreePtr U)
{
//PostC: Restituisce 1 se T è un sottoalbero di U, 0 altrimenti;
int ris1, ris2;
if(!T) return 1;
if (!U) return 0;
ris1 = alberiuguali(U->lPtr, T);
if (ris1 == 1)
return 1;
ris2 = alberiuguali(U->rPtr, T);
if (ris2 == 1)
return 1;
return 0;
}
Secondo voi sono giuste?
Grazie mille per le risposte.
P.S. Scusate se non ci sono commenti, cmq il codice dovrebbe essere chiaro
/----------/
Si definisca una funzione ricorsiva C che restituisce 1 se il primo dei due alberi in input e' un sottoalbero del secondo, 0 altrimenti. La funzione ha il seguente prototipo: int subTree(treePtr T, treePtr U). (Suggerimento: si usi una funzione d'appoggio per testare l'uguaglianza di alberi).
int alberiuguali(TreePtr A,TreePtr B)
{
/*PostC: Restituisce 1 se l'albero A è uguale all'albero B, restituisce 0
quando trova un valore di A diverso da quello di B;*/
if(A==NULL && B==NULL) return 1;
if(!A) return 0;
if(!B) return 0;
if(A->info == B->info)
{
alberiuguali(A->lPtr,B->lPtr);
alberiuguali(A->rPtr,B->rPtr);
}
else
return 0;
}
int subTree(TreePtr T, TreePtr U)
{
//PostC: Restituisce 1 se T è un sottoalbero di U, 0 altrimenti;
int ris1, ris2;
if(!T) return 1;
if (!U) return 0;
ris1 = alberiuguali(U->lPtr, T);
if (ris1 == 1)
return 1;
ris2 = alberiuguali(U->rPtr, T);
if (ris2 == 1)
return 1;
return 0;
}