PDA

Visualizza la versione completa : C - Visita albero


gabama
14-11-2009, 21:43
Albero Albero_Vuoto(void)
{

return(NULL);
}




Albero Crea(int val,Albero sin,Albero des)
{
Albero RADICE;

RADICE = malloc(sizeof(Nodo));
RADICE->inf = val;
RADICE->sinistro = sin;
RADICE->destro = des;
return (RADICE);
}




int sommaRic(Albero a) {
int s=0;
if(emptyL(a)) return(0);

else return( a->inf+sommaRic(a->sinistro) + sommaRic(a->destro));
}


void stampaAlbero(Albero a) {
if (!(emptyL(a))) {
stampaAlbero(a->sinistro);
stampaAlbero(a->destro);
// Sostituire cout con altre operazioni per altri scopi di visita
printf("\n%d",a->inf);
}

}


int altezza(Albero a) {
int as=0;int ad=0;
if(emptyL(a)) return(0);
else{
as=altezza(a->sinistro),ad=altezza(a->destro);
if(as==ad) return as+1; /* se sono profondi uguali Ŕ indifferente*/
if(as>ad) return as+1;
else return ad+1;
}}


Lista cammino(Albero a, Tipo_el e) {
int c=0;
c=cerca(a,e);
if(c!=1) {printf("\nL'elemento non e' presente");
return NULL;}
else {printf("\nL'elemento e' presente");
}
}


int cerca(Albero a, int x)
{
if (a == NULL) return 0;
else if (a->inf == x) return 1;
else return cerca(a->sinistro,x) || cerca(a->destro,x);
}


int camminoMax(Albero a, Lista* c) {
return 0;
}


Dovrei creare un a funzione CamminoMax per arrivare ad una foglia dell' albero e ritornare anche la profonditÓ,come posso fare?

br0tz
15-11-2009, 16:45
La funzione che devi scrivere Ŕ molto simile alla funzione cerca...

devi solo ritornare la profonditÓ quando a==null e fare un confronto per vedere se Ŕ la profonditÓ maggiore..

non penso tu debba modificare piu' di 2 o 3 righe di codice..

manda la tua idea!

gabama
15-11-2009, 18:08
grazie,direi di misurare la profonditÓ di tutte le foglie e di ritornare la maggiore

Se invece dovessi cercare un elemento,se c' Ŕ,stampare il percorso dalla radice all' elemento,come faccio?

Loading