下面是广度优先行程的Java代码:Java或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);
}
}
是否可以写一个递归函数做?
起初,我认为这将是容易的,所以我来到了这一点:
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);
}
后来我发现这是行不通的。它实际上是这样做的:
void preOrder(Node node) {
if (node == null) return;
visit(node);
preOrder(node.left);
preOrder(node.right);
}
以前有没有想过这个?
顺便说一句,做BFS递归可能会导致你的筹码在状态空间的大小增长。如果您的解决方案处于深度d,则找到解决方案所需的堆栈空间为b^d,其中b为分支因子。 – Eric 2010-06-25 17:23:06