Skip to content

二叉树的层序遍历

递归

js
var levelOrder = function (root) {
  const res = [];
  function dfs(root, n) {
    if (!root) return;
    res[n] = res[n] ? res[n].concat(root.val) : [root.val];
    dfs(root.left, n + 1);
    dfs(root.right, n + 1);
  }
  dfs(root, 0);
  return res;
};
var levelOrder = function (root) {
  const res = [];
  function dfs(root, n) {
    if (!root) return;
    res[n] = res[n] ? res[n].concat(root.val) : [root.val];
    dfs(root.left, n + 1);
    dfs(root.right, n + 1);
  }
  dfs(root, 0);
  return res;
};

迭代

js
var levelOrder = function (root) {
  if (!root) return [];
  const queue = [root];
  const res = [];
  while (queue.length) {
    const arr = [];
    // 注意这里i循环 一开始是固定的
    for (let i = queue.length - 1; i >= 0; i--) {
      const node = queue.pop();
      arr.push(node.val);
      node.left && queue.unshift(node.left);
      node.right && queue.unshift(node.right);
    }
    res.push(arr);
  }
  return res;
};
var levelOrder = function (root) {
  if (!root) return [];
  const queue = [root];
  const res = [];
  while (queue.length) {
    const arr = [];
    // 注意这里i循环 一开始是固定的
    for (let i = queue.length - 1; i >= 0; i--) {
      const node = queue.pop();
      arr.push(node.val);
      node.left && queue.unshift(node.left);
      node.right && queue.unshift(node.right);
    }
    res.push(arr);
  }
  return res;
};