Puoi costruirti una lista linkata sullo stack, da seguire ogni volta che devi stampare tutto un percorso:
codice:
struct nodo
{
struct nodo * sx;
struct nodo * dx;
char inf;
};
struct nodoList
{
struct nodo * payload;
struct nodoList * next;
};
void stampaCammini(struct nodo * p)
{
struct nodoList root;
root.next=NULL;
root.payload=p;
stampaCamminiHelper(&root, &root);
}
void stampaCamminiHelper(struct nodoList *prev, struct nodoList * root)
{
struct nodoList node;
node.next=NULL;
prev->next=&node;
if(prev->payload)
{
node.payload=prev->payload->sx;
stampaCamminiHelper(&node, root);
node.payload=prev->payload->dx;
stampaCamminiHelper(&node, root);
if(!prev->payload->sx && !prev->payload->dx)
{
struct nodoList *n=root;
while(n!=NULL)
{
putchar(n->payload->inf);
n=n->next;
}
putchar('\n');
}
}
}