Discussione: Sub Tree C
View Single Post
Old 13-04-2005, 08:42   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
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;
}

Ultima modifica di cionci : 13-04-2005 alle 09:18.
cionci è offline   Rispondi citando il messaggio o parte di esso