剑指 Offer 32 - I. 从上到下打印二叉树

71 阅读1分钟

剑指 Offer 32 - I. 从上到下打印二叉树

在遍历树的时候常常用到这个套路,就是把每层树的节点放入一个队列里面,然后处理完一个队列后,就处理下一个队列,注意,这里有个巧妙之处,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;
};