|
|||||||
|
|
|
![]() |
|
|
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 11: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: 13:26.




















