En el recorrido de transferencia no recursivo del preludio, el medio y el pedido posterior, el pedido posterior es el más problemático. ser almacenado en la pila.
Hay muchos métodos.
Copiar código del código de la siguiente manera:
Typedef struct {nodo * p;
LastOrderTraverse (bitree bt) {
// Primero, comience desde el nodo raíz, vaya a la parte inferior izquierda, vaya a la cabeza e ingrese cada nodo en la ruta hacia la pila.
p = bt;
Mientras (bt)
Push (bt, 0);
bt = bt.lchild;
}
// luego ingresa al cuerpo del ciclo
While (! Stack.empty ()) {// siempre que la pila no esté vacía
sn = stack.gettop ();
// Tenga en cuenta que cualquier nodo n, siempre y cuando tenga un hijo izquierdo, después de n ingresar a la pila, el hijo izquierdo de n debe seguir la pila (esto se refleja en la segunda mitad del algoritmo), por lo que cuando obtenemos el Acumular cuando el elemento superior, puede estar seguro de que este elemento no tiene un hijo izquierdo o su hijo izquierdo ha sido accedido, por lo que en este momento no nos importa su hijo izquierdo, solo nos importa su hijo derecho.
// Si se accede al niño correcto, o el elemento no tiene el hijo adecuado, la definición del recorrido posterior a la secuencia de servicios se puede viajar en este momento, el nodo de visita está disponible.
if (! sn.p.rchild || sn.rvisited) {{
p = pop ();
visitar (p);
}
De lo contrario // si su hijo correcto existe y Rvisited es 0, significa que el niño correcto que no se ha movido no ha sido trasladado antes, por lo que tratará con su hijo correcto.
{{
// En este momento, tenemos que ir a la parte inferior izquierda desde el nodo del niño derecho hasta el final, y poner todos los nodos en este camino en la pila.
//, por supuesto, establezca el rvisionado del nodo en 1 antes de ingresar a la pila, porque la pila del niño correcto significa que se accederá a su hijo derecho antes (esto se entiende bien porque siempre seguimos desde la observación, tome la observación. elemento de la pila para visitar). Se puede ver que cuando el elemento está en la parte superior de la pila, el niño correcto debe pasar por la visita, por lo que el Rvisited se puede establecer en 1 aquí.
sn.rvisited = 1;
// Ve al final hasta la parte inferior izquierda y ponga todos los elementos en el camino en la pila
p = sn.p.rchild;
While (p! = 0) {
empuje (p, 0);
p = P.lchild;
}
} // Este ciclo ha terminado.
}
}