相关疑难解决方法(0)

Java或C++中的递归广度优先旅行函数?

这是一个广度优先旅行的java代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以编写递归函数来做同样的事情?

起初,我认为这很容易,所以我出来了:

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);   
}
Run Code Online (Sandbox Code Playgroud)

然后我发现它不起作用.它实际上与此相同:

void preOrder(Node node) {
    if (node == null) return;
    visit(node);
    preOrder(node.left); …
Run Code Online (Sandbox Code Playgroud)

c++ java algorithm tree breadth-first-search

12
推荐指数
3
解决办法
4万
查看次数

标签 统计

algorithm ×1

breadth-first-search ×1

c++ ×1

java ×1

tree ×1