|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
[C] Massimo Elemento In Un Albero Binario
Codice HTML:
int Massimo(int x, tree T) { if(T!=NULL) { Massimo(x,T->SX); if(T->DATO>x) { x=T->DATO; } Massimo(x,T->DX); } } Naturalmente la x all'inizio quando si entra nella funzione viene messa a 0 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ho dimenticato di mettere "return x" ma non penso che cambi il risultato
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Codice:
int Massimo(int x, tree T) { if(T!=NULL) { Massimo(x,T->SX); if(T->DATO>x) { x=T->DATO; } Massimo(x,T->DX); } } Quando arrivi alla fine del ramo sinitro e non c'è più alcun sottoalbero non si verifica la condizone if(T!=NULL) e quindi la funzione ricorsiva ritorna alla chiamante precedente e così via fino a tornare nel contesto della prima invocazione (in grasetto nel codice). A quel punto hai esaminato tutto il ramo di sinitra ma non hai ancora mai eseguito nessun controllo sul valore del dato rispetto a x; cominci a farlo solo subito dopo con Codice:
... f(T->DATO>x) { x=T->DATO; } ... Codice:
... Massimo(x,T->DX); che confronta il DATO contenuto con x e, se maggiore, lo memorizza in x.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
è possibile correggerlo oppure è sbagliato proprio l'approccio a questo esercizio?
perchè una volta il prof lo fece in un modo molto piu complicato, ovvero facendo la #define, definendo una funzione che prendeva 3 interi e ne calcolava il maggiore.. |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Io proverei cosi'. Codice:
int Massimo(int x, tree T) { int ret=-1; (-infinito se i valori possono essere negativi) if(T!=NULL) { int sinistro = Massimo(x,T->SX); int centro = t->DATO; int destro = Massimo(x, t->DX); ret=max(sinistro,centro); ret=max(ret,destro); } return ret; }
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 31-07-2008 alle 10:51. Motivo: default return |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
Quote:
__________________
Khelidan |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:30.