在遍历树的时候常常用到这个套路,就是把每层树的节点放入一个队列里面,然后处理完一个队列后,就处理下一个队列,注意,这里有个巧妙之处,while (queue.length) 这里询问的queue.length在一次while循环内,是不变的,直到下一次循环时候,才会重新求值queue.length,求值之后,在下一次循环体内是长期有效的并不是因为在接下来的操作queue.length,就会改变本次的值,等到所有的队列清空完了后,就直接返回res即可
var levelOrder = function (root) {
if(!root) return []
var queue = [root];
var res = []
while (queue.length) {
var len = queue.length;
for (var i = 0; i < len; i++) {
var node = queue.shift();
if (node) {
res.push(node.val);
if(node.left){
queue.push(node.left);
}
if(node.right){
queue.push(node.right);
}
}
}
}
return res;
};