PDA

View Full Version : [c] algoritmo di visita postorder


manu@2986
28-06-2006, 13:21
void carica_stack(albero alb,stack *head)
{ stack el;
stack aux=*head;
if(alb!=NULL)
{printf("%d ",alb->dato);
if(alb->left!=NULL)
carica_stack(alb->left,&aux);
if(alb->right!=NULL)
carica_stack(alb->right,&aux);
el = (stack)malloc(sizeof(struct l_nodo));
if(alb->segno!=NULL)
strcpy(el->info,alb->segno);
else
itoa(alb->dato,el->info,10);
el->next=aux;
aux=el;
aux=aux->next;
printf("%s\n",el->info);
}
}

Mi da sempre errori di accesso alla memoria.... :cry:
In pratica dovrebbe visitare l'albero in postorder ed inserire all'interno di uno stack i valori dell'albero..... :help:
Cos'è che potrebbe dare l'errore?!L'albero l'ho creato con un'altra funzione ma dovrebbe essere corretto....da errore dopo 3 o 4 chiamate ricorsive...

Fenomeno85
04-07-2006, 19:17
visita solo in ricorsione senza mettere sullo stack che non serve a nulla.

in speudocodice:


void postorder (nodo root)
{
if (root == null) return;
postorder (root.left());
postorder (root.right());
print (root.valore);
}

quindi dovrebbe essere così a muzzo

void carica_stack(albero alb){
if(alb==NULL) return;
carica_stack(alb->left);
carica_stack(alb->right);
printf("%s\n",el->info);

}


oggi ho fatto l'esame su ste cose :asd: spero che non abbia fatto su qualche troiata adesso :asd:

~§~ Sempre E Solo Lei ~§~

71104
04-07-2006, 19:24
la mia versione:

typedef struct _TREE {
int Field;
struct _TREE *Left;
struct _TREE *Right;
} TREE, *PTREE;

void VisitaPostOrder(PTREE Tree) {
if (!Tree) {
return;
}
VisitaPostOrder(Tree->Left);
VisitaPostOrder(Tree->Right);
printf("%d\n", Tree->Field);
}

e niente stack :fagiano:

manu@2986
05-07-2006, 16:45
lo stack mi serviva per la parte successiva del programma..cmq alla fine ho risolto facendo...come avete fatto voi + o meno....l'esame ce l'ho dopodomani..ma sn tranquillo...invece domani...analisi!!ma vado li già rassegnato....