二叉树

二叉树层序遍历

题目编号:102
二叉树层序遍历

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function(root) {
  var r = [];
  var queue = [];
  queue.push(root);
  var traverse = function (node) {
    if (!node) return; 
    if (!node.floor) node.floor = 0;
    if (node.left) {
      node.left.floor = node.floor + 1;
      queue.push(node.left);
    }
    if (node.right) {
      node.right.floor = node.floor + 1;
      queue.push(node.right);
    }
    !r[node.floor] && (r[node.floor] = []);
    r[node.floor].push(node.val);
    queue.shift();
    traverse(queue[0]);
  }
  traverse(root);
  return r;
};

总结

  1. 这题采用了BFS和递归实现,在使用递归的时候,出现的栈溢出的情况,因此写完代码,应该考虑到遍历两层树的情况;
  2. BFS算法为基石,需要其它变量辅助判断第几层,例如: floor