Un errore c'è perchè tu non fai una ricorsione nelle funzione subTree... Se per sottoalbero si intende che l'abero T possa essere essere un sottoalbero di U a partire da qualsiasi livello, allora il tuo codice è sbagliato perchè controlli sono il primo livello...
Codice:
int subTree(TreePtr T, TreePtr U)
{
//PostC: Restituisce 1 se T è un sottoalbero di U, 0 altrimenti;
/*verifico se a questo livello sono uguali*/
if(alberiuguali(U, T) > 0)
return 1:
/*a questo livello la condizione non si è verificata, bisogna scendere in un sotto livello*/
if((subTree(T, U->lPtr)+subTree(T, U->rPtr)) > 0)
return 1;
return 0;
}
C'è anche un errorino nella prima funzione: ti ritornava sempre zero perchè non facevi un retarn nel caso in cui entrambi i sottoalberi fossero uguali...
Codice:
int alberiuguali(TreePtr A,TreePtr B)
{
/*PostC: Restituisce 1 se l'albero A è uguale all'albero B, restituisce 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)
{
if((alberiuguali(A->lPtr,B->lPtr) + alberiuguali(A->rPtr,B->rPtr)) == 2)
return 1;
}
else
return 0;
}