Lo que está haciendo es esencialmente un DFS del árbol. Puede eliminar la recursividad utilizando una pila:
traverse(Node node) {
if (node==NULL)
return;
stack<Node> stk;
stk.push(node);
while (!stk.empty()) {
Node top = stk.pop();
for (Node child in top.getChildren()) {
stk.push(child);
}
process(top);
}
}
Si quieres un BFS utilizar una cola:
traverse(Node node) {
if (node==NULL)
return;
queue<Node> que;
que.addRear(node);
while (!que.empty()) {
Node front = que.deleteFront();
for (Node child in front.getChildren()) {
que.addRear(child);
}
process(front);
}
}
En caso de que quiera alguna otra forma de recorrer, que tendrá que seguir el mismo enfoque, aunque con una estructura de datos diferente para almacenar el nodo. Tal vez una cola de prioridad (si desea evaluar una función en cada nodo y luego procesar los nodos según ese valor).
Cualquier algoritmo recursivo se puede reducir a un bucle + pila, por lo que no es una gran restricción. Acéptelo con cualquiera de los algoritmos que se pueden encontrar en [Google] (http://www.google.com.au/search?q=n-ary+tree+traversal). –
Estoy de buen humor, así que he traducido tu algoritmo por ti. En general, no es algo terriblemente difícil de hacer, y un google rápido habría aparecido [muchos resultados] (http://en.wikipedia.org/wiki/Tree_traversal#Queue-based_level_order_traversal) para esto. El cruce de árboles es un problema muy bien definido en este momento de la historia. –
Simplemente interesante @ako. ¿Por qué quieres hacerlo sin recursión? ¿Hay alguna razón o esta es solo una pregunta para ganar reputación? –