Voici un code java pour Voyage en largeur:Fonction récursive de première largeur en Java ou en 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);
}
}
Est-il possible d'écrire une fonction récursive pour faire la même chose?
Au début, je pensais que ce serait facile, alors je suis venu avec ceci:
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);
}
Je trouve cela ne fonctionne pas. Il fait en fait la même chose que ceci:
void preOrder(Node node) {
if (node == null) return;
visit(node);
preOrder(node.left);
preOrder(node.right);
}
Avez-vous déjà pensé à cela?
Soit dit en passant, en faisant BFS aurait probablement récursive causer votre pile de croître dans la taille de l'espace d'état. Si votre solution est en profondeur d, l'espace de pile requis pour trouver la solution serait b^d où b est le facteur de branchement. – Eric