题目描述:
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
示例 :
输入:[1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。
提示
- 树中的节点数介于
1 和 10^4
之间 -10^5 <= node.val <= 10^5
思路:
- 利用队列,对二叉树进行层序遍历,记录每层节点和,逐步更新ans为最大和所在层数
- 可以利用变量,记录下一层节点的个数,每次利用for循环访问一层的节点,即可达到统计的目的
具体代码如下 :
class Solution {
public:
int ans = 0;int anshe = -2147483648;//ans层数与ans层和
int cenghe; int curceng;
queue<TreeNode*> que;
int maxLevelSum(TreeNode* root) {
if(!root)return 0;
int len =1;int next = 0;curceng = 0;//当前层个数,下一层节点个数,当前在第几层。
que.push(root);
while(que.size()){
cenghe = 0;//当前层的和
curceng ++;//当前在第几层
next = 0;//下一层个数
for(int i = 0 ; i < len;i++){
TreeNode* t = que.front();que.pop();
cenghe += t->val;
if(t->left){que.push(t->left);next++;}
if(t->right){que.push(t->right);next++;}
}
len = next;
if(cenghe > anshe){
ans = curceng;
anshe = cenghe;
}
}
return ans;
}
};