1161. 最大层内元素和
日期:2022/7/31
题目描述:给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请返回层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
示例:
输入:root = [1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。
输入:root = [989,null,10250,98693,-89388,null,null,null,-32127]
输出:2
思路:
BFS
代码+解析:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int maxLevelSum(TreeNode* root) {
queue<TreeNode*> q;
q.push(root);
int maxNum = root->val;
int maxLevel = 1;
int level = 1;
while(!q.empty()){
int n = q.size(); //当前q中都是这一层的所有结点,全部消耗掉
int temp = 0; //这层的总和
for(int i=0; i<n; i++){
TreeNode* node = q.front();
temp += node->val;
if(node->left){
q.push(node->left);
}
if(node->right){
q.push(node->right);
}
q.pop();
}
if(temp > maxNum){
maxNum = temp;
maxLevel = level;
}
level++;
}
return maxLevel;
}
};