最大层内元素和

84 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

1161. 最大层内元素和 - 力扣(LeetCode)

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。

请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

示例 1:


输入: root = [1,7,0,7,-8,null,null]
输出: 2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。

示例 2:

输入: root = [989,null,10250,98693,-89388,null,null,null,-32127]
输出: 2

提示:

  • 树中的节点数在 [1, 10^4]范围内
  • -10^5 <= Node.val <= 10^5

解题

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxLevelSum = function (root) {
  let maxSum = Number.MIN_SAFE_INTEGER;
  let maxLevel = -1;
  let nodes = [root];
  let level = 1;
  while (nodes.length) {
    let sum = 0;
    let children = [];
    for (let i = 0; i < nodes.length; i++) {
      sum += nodes[i].val;
      nodes[i].left && children.push(nodes[i].left);
      nodes[i].right && children.push(nodes[i].right);
    }
    if (sum > maxSum) {
      maxLevel = level;
      maxSum = sum;
    }
    nodes = children
    level++;
  }
};