[LeetCode]508. Most Frequent Subtree Sum
题目描述
思路
递归,保存每次的和到map中,同时计算和最多出现的次数 思路简单,回顾树的操作
代码
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(
int x) : val(x), left(NULL), right(NULL) {}
};
int countSubtreeSums(TreeNode *r,
unordered_map<int, int> &countSum,
int& max){
if (!r)
return 0;
int sum = r->val;
sum += countSubtreeSums(r->left, countSum, max);
sum += countSubtreeSums(r->right, countSum, max);
++countSum[sum];
if (countSum[sum] > max)
max = countSum[sum];
return sum;
}
vector<int> findFrequentTreeSum(TreeNode* root) {
unordered_map<int, int> countSum;
int max =
0;
countSubtreeSums(root, countSum, max);
vector<int> res;
for (
const auto &x : countSum){
if (max == x.second)
res.push_back(x.first);
}
return res;
}
int main(){
int depth =
4;
TreeNode *root =
new TreeNode(
5);
TreeNode *left =
new TreeNode(
2);
TreeNode *right =
new TreeNode(-
3);
root->left = left;
root->right = right;
vector<int> res = findFrequentTreeSum(root);
for (
auto &p : res){
cout << p << endl;
}
system(
"pause");
}
转载请注明原文地址: https://ju.6miu.com/read-25521.html