Na travessia não -recursiva de travessia da ordem do prelúdio, médio e pós -pós, a ordem post é a mais problemática. ser armazenado na pilha.
Existem muitos métodos.
Copie o código do código da seguinte forma:
Typedef struct {nó * p;
LastOrderTraverse (Bitree Bt) {
// Primeiro, comece no nó raiz, vá para o canto inferior esquerdo, vá para a cabeça e digite cada nó no caminho na pilha.
p = Bt;
While (bt)
push (bt, 0);
bt = bt.lchild;
}
// então insira o corpo do ciclo
Enquanto (! Stack.Empty ()) {// desde que a pilha não esteja vazia
sn = pilha.gettop ();
// Observe que qualquer nó n, desde que ele tenha um filho esquerdo, depois de entrar na pilha, o filho esquerdo de n deve seguir a pilha (isso se reflete na segunda metade do algoritmo), então quando obtemos o Empilhe quando o elemento superior, você pode ter certeza de que esse elemento não tem um filho esquerdo ou seu filho de esquerda foi acessado; portanto, neste momento não nos importamos com o filho esquerdo, apenas nos preocupamos com o filho certo.
// Se a criança certa foi acessada, ou o elemento não possui a criança certa, a definição de travessia sequencial pode ser percorrida.
if (! sn.p.rchild || sn.rvisited) {{
p = pop ();
Visite (P);
}
Else // Se o filho certo existe e o RVisited for 0, isso significa que o filho certo que não se moveu não foi movido antes, então ele lidará com seu filho certo.
{{
// Nesse momento, temos que ir para o canto inferior esquerdo do nó da criança direita até o final e colocar todos os nós nesse caminho na pilha.
// é claro, defina o risited do nó como 1 antes de entrar na pilha, porque a pilha da criança certa significa que sua criança certa será acessada antes dela (isso é bem compreendido porque sempre seguimos da observação tomando o tom elemento da pilha para visita). Pode -se observar que, quando o elemento está no topo da pilha, a criança certa deve ser passada por visita, para que o RVisited possa ser definido como 1 aqui.
sn.rvisited = 1;
// Vá até o fim para o canto inferior esquerdo e coloque todos os elementos no caminho na pilha
p = sn.p.rchild;
While (p! = 0) {
push (p, 0);
p = p.lchild;
}
} // Este ciclo terminou.
}
}