给你一个二叉树的根节点 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
思路:二叉树的层次遍历问题
class Solution {
public:
void dfs(TreeNode* root, int level, vector<int> &re){
if(!root) return;
if(re.size()==level){
re.push_back(0);
}
re[level]+=root->val;
dfs(root->left, level+1, re);
dfs(root->right, level+1, re);
}
int maxLevelSum(TreeNode* root) {
if(!root) return 0;
vector<int>re;
dfs(root, 0, re);
int ans=0;
for(int i=1; i<re.size(); ++i){
if(re[i]>re[ans])
ans=i;
}
return ans+1;
}
};