Dal libro 'Strutture dati in C' di horowitz sahni e anderson-fred:
ALGORITMO ITERATIVO DI VISITA INORDER
:ciauz:codice:#define MAX_STACK_SIZE 100 typedef struct nodo *treepointer; typedef struct nodo { int dati; tree_pointer figlio_sinistro; tree_pointer figlio_destro; } void iter_inorder(tree_pointer nodo){ int top = -1 //inizializza lo stack tree_pointer stack[MAX_STACK_SIZE]; for(;;){ for(; nodo; nodo = nodo -> figlio_sinistro) add(&top, nodo, stack);//inserisce nello stack nodo = delete(&top, stack);//elimina dallo stack if(! nodo) //stack vuoto break; printf("\n%d", nodo -> dati); nodo = nodo -> figlio_destro; } } //inserimento nello stack void add(int *top, tree_pointer item, tree_pointer stack[]){ if(*top >= MAX_STACK_SIZE - 1) return; //stack pieno stack[++*top] = item; } //elimina l'elemento in coma allo stack e lo resituisce tree_pointer delete(int *top, tree_pointer stack[]){ if(*top == -1) return NULL;//errore return stack[(*top)--]; }

Rispondi quotando