这是一个广度优先旅行的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) 在编写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++语法.)