1 题目
Given the root
of a binary tree, the level of its root is 1
, the level of its children is 2
, and so on.
Return the smallest level X
such that the sum of all the values of nodes at level X
is maximal.
Example 1:
Input: [1,7,0,7,-8,null,null]
Output: 2
Explanation:
Level 1 sum = 1.
Level 2 sum = 7 + 0 = 7.
Level 3 sum = 7 + -8 = -1.
So we return the level with the maximum sum which is level 2.
2 尝试解
2.1 分析
对于二叉树,求每一层所有节点值之和,问和最大的是哪层。
典型的广度优先题目,用一个队列从根节点开始存储当前层的节点,然后在计算本层和之时,将下一层节点同时放入新的队列。
2.2 代码
class Solution {
public:
int maxLevelSum(TreeNode* root) {
int sum = INT_MIN;
int level = 1;
int result = 0;
queue<TreeNode*> cur;
cur.push(root);
while(cur.size()){
int cur_sum = 0;
queue<TreeNode*> next;
while(cur.size()){
cur_sum += cur.front()->val;
if(cur.front()->left) next.push(cur.front()->left);
if(cur.front()->right) next.push(cur.front()->right);
cur.pop();
}
if(cur_sum > sum){
sum = cur_sum;
result = level;
}
level ++;
swap(cur,next);
}
return result;
}
};
3 标准解
class Solution {
public:
int maxLevelSum(TreeNode* root) {
if (root == NULL) return 0;
int res = 0, level = 0, global_sum = 0;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int count = q.size(), tmp_sum = 0;
while (count--) {
TreeNode* tmp = q.front();
q.pop();
tmp_sum += tmp->val;
if (tmp->left) q.push(tmp->left);
if (tmp->right) q.push(tmp->right);
}
level++;
if (tmp_sum > global_sum) res = level;
global_sum = max(tmp_sum, global_sum);
}
return res;
}
};