|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
[JAVA] Alberi e Metodo Ricorsivo per contare le foglie
Ciao,
ho come esercizio l'implementazione di un metodo ricorsivo con questa intestatura: int calcola(AlberoBinario a) che prende un albero binario e ritorna il numero di foglie che esso possiede. Un albero binario è un insieme di nodi, che partono da un'unica radice e si raddoppiano ogni volta scendendo di livello... il nodo superiore è detto padre e i due nodi inferiori sono detti figli.. un nodo è detto foglia quando non possiede nessun figlio!! Quindi il metodo deve ricorsivamente controllare tutti i nodi che non hanno nessun figlio e ritornarne l'esatto numero. Questa è la soluzione a cui ho pensato.. sapreste dirmi se è giusta o se ho sbagliato qualcosa? Grazie ![]() Codice:
public int calcola(AlberoBinario a){
if(a==null) return 0; //se l'albero è uguale a null vuol dire che è finito e io sono uscito fuori dall'ultima foglia
int f=0;
if(a.figlioSX==null&& a.figlioDX==null) f++; //supponendo che a.figlioSX e DX ritornino true se il nodo ha figlio e false altrimenti
f=calcola(a.figlioSX);
f=calcola(a.figlioDX);
return f+=f;
}
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
up
__________________
|
|
|
|
|
|
#3 | |
|
Utente sospeso
Iscritto dal: Jul 2002
Città: Ostia/Roma
Messaggi: 1191
|
Quote:
Io farei cosi : public int calcola(AlberoBinario a){ if(a==null) return 0; if(a.figlioSX==null&& a.figlioDX==null) return 1; int g=calcola(a.figlioSX); int h=calcola(a.figlioDX); return g+h; } Prova e fammi sapere. Mii che pippe mentali
__________________
Codice:
Ho concluso affari con : 8310(1,2),luxo,weather65,gokou,Zara,LotharInt,Mammabell,cionci,omerook,nathbigga,V0r[T3X],FatMas,3N20,smickys,CICUS,Dreamland,morpheus89,AMDman,Andi89,drive97,mich25,killerbox,abc3d,Sclergio,saint80,mazä,MR_GINO,OdinEidolon,ezekiel22 Ultima modifica di Galotar : 15-02-2006 alle 14:43. |
|
|
|
|
|
|
#4 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Galotar, il tuo algoritmo ha un paio di problemi:
1) non devi ritornare g+h ma g+h+1 2) il secondo if è inutile io lo farei così: Codice:
int calcola(AlberoBinario a) {
if (null == a) {
return 0;
}
return calcola(a.figlioSX) + calcola(a.figlioDX) + 1;
}
|
|
|
|
|
|
#5 | |
|
Utente sospeso
Iscritto dal: Jul 2002
Città: Ostia/Roma
Messaggi: 1191
|
Quote:
2)Se Figlio è null non dovrebbe ritornare 0? Fammi capire non ho capito perchè sono errori. Edito : adesso ho capito credevo avessi levato l'if con il ritorno 0. Cmq dovrebbe funzionare pure il mio di algoritmo,il tuo è più elegante ed efficiente sicuramente.
__________________
Codice:
Ho concluso affari con : 8310(1,2),luxo,weather65,gokou,Zara,LotharInt,Mammabell,cionci,omerook,nathbigga,V0r[T3X],FatMas,3N20,smickys,CICUS,Dreamland,morpheus89,AMDman,Andi89,drive97,mich25,killerbox,abc3d,Sclergio,saint80,mazä,MR_GINO,OdinEidolon,ezekiel22 Ultima modifica di Galotar : 15-02-2006 alle 16:58. |
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Quote:
|
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
quello che ho scritto io conta tutti i nodi, invece per contare le foglie era corretto il tuo. |
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#9 | |
|
Utente sospeso
Iscritto dal: Jul 2002
Città: Ostia/Roma
Messaggi: 1191
|
Quote:
Miii che caciara st'algoritmo
__________________
Codice:
Ho concluso affari con : 8310(1,2),luxo,weather65,gokou,Zara,LotharInt,Mammabell,cionci,omerook,nathbigga,V0r[T3X],FatMas,3N20,smickys,CICUS,Dreamland,morpheus89,AMDman,Andi89,drive97,mich25,killerbox,abc3d,Sclergio,saint80,mazä,MR_GINO,OdinEidolon,ezekiel22 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:37.




















