Mi plan es utilizar dos pilas. Uno para el recorrido previo a la orden y el otro para el recorrido posterior al pedido. Ahora, ejecuto DFS iterativo estándar (recorrido transversal en profundidad), y tan pronto como I pop
de la pila "pre" lo empujo en la pila "publicar". Al final, mi pila de "publicaciones" tendrá un nodo hijo en la parte superior y una raíz en la parte inferior.
treeSearch(Tree root) {
Stack pre;
Stack post;
pre.add(root);
while (pre.isNotEmpty()) {
int x = pre.pop();
// do pre-order visit here on x
post.add(x);
pre.addAll(getChildren(x));
}
while (post.isNotEmpty()) {
int y = post.pop();
// do post-order visit here on y
}
}
root
siempre ser recorridos duran de post
pila, ya que se quedará en la parte inferior.
Esto es simple código java:
public void treeSearch(Tree tree) {
Stack<Integer> preStack = new Stack<Integer>();
Stack<Integer> postStack = new Stack<Integer>();
preStack.add(tree.root);
while (!preStack.isEmpty()) {
int currentNode = preStack.pop();
// do pre-order visit on current node
postStack.add(currentNode);
int[] children = tree.getNeighbours(currentNode);
for (int child : children) {
preStack.add(child);
}
}
while (!postStack.isEmpty()) {
int currentNode = postStack.pop();
// do post-order visit on current node
}
}
estoy asumiendo que esto es un árbol, por lo que: ningún ciclo y sin volver a visitar el mismo nodo nuevo. Pero, si queremos, siempre podemos tener una matriz visitada y verificar eso.
pregunta bastante genérico, con requisitos muy específicos;). ¿Qué tal si solo solicitamos pistas sobre un recorrido iterativo? Antes y después de las operaciones no encajarán;). –
Suena como "alguien puede mostrarme cómo iterar sobre la matriz y ejecutar la función en cada elemento". ¿Cuál es el problema con iterar paso a paso, tal como lo describió? –
Cada padre debe ser visitado antes de que sus hijos (pre-operación) luego visitó una vez más después de que es niños (post-operación). Perdemos ese contexto cuando iteramos sobre una matriz. Es fácil de hacer recursivamente, pero me encanta cómo hacerlo de forma iterativa. – xeolabs