PDA

View Full Version : [C] Aiuto - Come funziona lo stack nelle chiamate ricorsive sugli alberi?


xbubbax
22-01-2009, 17:38
Oggi sto cominciando a fare pratica con gli alberi binari in c ma non riesco a capire come funzionano queste 3 semplici funzioni.

void Inorder(tree t){
if(t!=NULL)
{
Inorder(t->SX);
printf("%d ", t->DATO);
Inorder(t->DX);
}}

void Preorder(tree t){
if(t!=NULL)
{
printf("%d ", t->DATO);
Preorder(t->SX);
Preorder(t->DX);
}
}

void Postorder(tree t)
{
if(t!=NULL)
{
Postorder(t->SX);
Postorder(t->DX);
printf("%d ", t->DATO);
}
}


ad esempio se l'albero è questo (con visione Inorder): 12 - 2 - 14 - 3 - 7 - 9 - 5

Potete spiegarmi tutti i passaggi che fanno le 3 funzioni, cioè come agiscono sullo stack ecc..in pratica non capisco ancora bene come funzionano le chiamate ricorsive.
Vorrei capirlo bene perchè se non capisco questo dubito che potrò fare esercizi piu difficili sugli alberi.

Vi ringrazio in anticipo.

Vincenzo1968
22-01-2009, 18:47
Ciao,

qui (http://www.guidealgoritmi.it/ShowArticle.aspx?ID=9) trovi un'implementazioni delle tre funzioni in versione iterativa(con l'uso esplicito di uno stack).

;)

xbubbax
23-01-2009, 09:48
è un po complicato da capire per me..non avete qualcosa dove lo spiega graficamente?

banryu79
23-01-2009, 11:49
...non avete qualcosa dove lo spiega graficamente?

Un'immagine grafica che illustra in modo banale l'attraversamento in inorder, preorder e postorder lo trovi a questa pagina (http://en.wikipedia.org/wiki/Tree_traversal) di wikipedia (in inglese)

xbubbax
23-01-2009, 12:19
ti ringrazio però mi servirebbe un immagine di come avviene il riempimento e svuotamento dello stack.
in poche parole non capisco come vengono eseguite queste cose

inorder(ALBERO->SINISTRO)
PRINTF(NODO)
inorder(ALBERO->DESTRO)

non capisco i vari passaggi, ad esempio quando arriva alla fine dell'albero e poi torna su..