剑指 Offer II 044. 二叉树每层的最大值

82 阅读1分钟

剑指 Offer II 044. 二叉树每层的最大值

方法一:

分别用两个队列来存放当前层和下一层节点

  • 用两个队列实现二叉树的广度优先搜索
  • 把不同层的节点放入到不同的队列中
  • 队列arr1只放当前遍历层的节点
  • 队列arr2只放下一层的节点
  • 每次执行完了arr1之后,就会将arr2交接给arr1,然后让arr2置空,为了个轮回做准备

image.png

var largestValues = function (root) {
  let arr1 = [];
  let arr2 = [];
  if (root) {
    arr1.push(root);
  }
  let result = [];
  let max = -Infinity;
  while (arr1.length) {
    let node = arr1.shift();
    max = Math.max(max, node.val);
    if (node.left) {
      arr2.push(node.left);
    }
    if (node.right) {
      arr2.push(node.right);
    }
    if (!arr1.length) {
      result.push(max);
      max = -Infinity;
      arr1 = arr2;
      arr2 = [];
    }
  }
  return result;
};

方法二:

Depth First Search(深度优先搜索,简称DFS)

var largestValues = function (root) {
  let res = [];
  const dfs = (node, d) => {
    if (node == null) return;
    if (res[d] || res[d] == 0) {
      res[d] = Math.max(res[d], node.val);
    } else {
      res[d] = node.val;
    }
    dfs(node.left, d + 1);
    dfs(node.right, d + 1);
  };
  dfs(root, 0);
  return res;
};