Dal libro 'Strutture dati in C' di horowitz sahni e anderson-fred:

ALGORITMO ITERATIVO DI VISITA INORDER

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)--];
}
:ciauz: