最大层内元素之和


题目描述

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

示例

img

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

分析

这是一个典型的树与BFS综合题。通过计算树的每一层节点之和,方可回答此题。
此题涉及到了队列的BFS。
队列的作用是不仅要用于计算出当前层的节点值的和,还要保存本层节点孩子的地址。
通过while()循环,算出一层的值。

参考代码

class Solution {
public:
    int maxLevelSum(TreeNode* root) {

        if(root == nullptr) {return 0;}
        //
        int maxlevel = 1 , curlevel = 1 , summax = 1 ;
        queue<TreeNode*> q ;
        q.push(root);
        while(!q.empty())
        {
            int s = q.size();
            int cursum = 0;
            while(s)
            {
                TreeNode* font = q.front();
                q.pop();
                if(font->left != nullptr){q.push(font->left);}
                if(font->right != nullptr){q.push(font->right);}
                cursum += font->val;
                --s;
            }
            if(cursum > summax){maxlevel = curlevel ; summax = cursum ; }
            ++curlevel;
        }
        return maxlevel;
    }
};

文章作者: 瑾年
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 瑾年 !
 上一篇
数字三角形 数字三角形
题目描述 图1显示了一个数字三角形。编写一个程序,计算从顶部开始到底部某处的路径上传递的最大数字总和。每个步骤可以沿对角线向下滑动,也可以沿斜向下滑动到右侧。
下一篇 
拼写单词 拼写单词
题目描述给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
  目录