[Enunciado] Código iterativo da varredura esquerda-raiz-direita de uma árvore binária que manipula a pilha de nós diretamente (e não através das funções empilha e desempilha):
// Recebe a raiz r de uma árvore binária e // imprime os conteúdos dos seus nós // em ordem e-r-d. void erd_i (arvore r) { noh *x, *pilha[101]; int t = 0; pilha[t++] = r; while (1) { // pilha[0..t-1] é uma pilha de nós x = pilha[t-1]; if (x != NULL) pilha[t++] = x->esq; else { if (t == 0) break; x = pilha[--t]; printf ("%d\n", x->conteudo); pilha[t++] = x->dir; } } }
Esta versão supõe que a altura da árvore não passa de 100, mas é fácil remover esse restrição alocando uma pilha de tamanho apropriado.
Note a semelhança entre esse código e o código da função que enumera subsequências de 1..n em ordem lexicográfica.