1.题目要求:
给你一棵二叉树的根节点 root 和一个正整数 k 。
树中的 层和 是指 同一层 上节点值的总和。
返回树中第 k 大的层和(不一定不同)。如果树少于 k 层,则返回 -1 。
注意,如果两个节点与根节点的距离相同,则认为它们在同一层。
输入:root = [5,8,9,2,1,3,7,4,6], k = 2
输出:13
解释:树中每一层的层和分别是:
- Level 1: 5
- Level 2: 8 + 9 = 17
- Level 3: 2 + 1 + 3 + 7 = 13
- Level 4: 4 + 6 = 10
第 2 大的层和等于 13 。
输入:root = [1,2,null,3], k = 1
输出:3
解释:最大的层和是 3 。
/**
* 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:
long long kthLargestLevelSum(TreeNode* root, int k) {
vector<long long> array;
queue<TreeNode*> deq;
long long sum = 0;
int count = 1;
int nextcount = 0;
deq.push(root);
int size = 1;
while(size != 0){
for(int i = 0;i < count;i++){
TreeNode* temp = deq.front();
sum += temp->val;
if(temp->left != NULL){
deq.push(temp->left);
nextcount++;
size++;
}
if(temp->right != NULL){
deq.push(temp->right);
nextcount++;
size++;
}
deq.pop();
size--;
}
count = nextcount;
nextcount = 0;
array.push_back(sum);
sum = 0;
}
sort(array.begin(),array.end(),greater<long long>());
if(array.size() <= k - 1){
return -1;
}else{
return array.at(k - 1);
}
return 0;
}
};