Aquí es un código java para el recorrido primero en amplitud:¿Función de viaje de amplitud recursiva en Java o C++?
void breadthFirstNonRecursive(){
Queue<Node> queue = new java.util.LinkedList<Node>();
queue.offer(root);
while(!queue.isEmpty()){
Node node = queue.poll();
visit(node);
if (node.left != null)
queue.offer(node.left);
if (node.right != null)
queue.offer(node.right);
}
}
¿Es posible escribir una función recursiva para hacer lo mismo?
Al principio, pensé que esto sería fácil, así que salió con esto:
void breadthFirstRecursive(){
Queue<Node> q = new LinkedList<Node>();
breadthFirst(root, q);
}
void breadthFirst(Node node, Queue<Node> q){
if (node == null) return;
q.offer(node);
Node n = q.poll();
visit(n);
if (n.left != null)
breadthFirst(n.left, q);
if (n.right != null)
breadthFirst(n.right, q);
}
Entonces me encontré con que no funciona. En realidad, hace lo mismo que esto:
void preOrder(Node node) {
if (node == null) return;
visit(node);
preOrder(node.left);
preOrder(node.right);
}
¿Alguien ha pensado en esto antes?
Por cierto, haciendo BFS recursiva probablemente haría que su pila de crecer en el tamaño del espacio de estados. Si su solución está en profundidad d, el espacio de pila requerido para encontrar la solución sería b^d donde b es el factor de bifurcación. – Eric