小编joe*_*jax的帖子

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万
查看次数

C++任务 - 时尚还是性能?

在编写Java代码多年之后,当我看到这个C++语句时,我感到很惊讶:

int a,b;
int c = (a=1, b=a+2, b*3);
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是编码风格的选择,还是有真正的好处?(我正在寻找一个实用的用例)

我认为编译器会看到它与以下内容相同:

int a=1, b=a+2;
int c = b*3;
Run Code Online (Sandbox Code Playgroud)

(这是什么官方名称?我认为它是标准的C/C++语法.)

c variable-assignment

11
推荐指数
3
解决办法
854
查看次数