https://leetcode.com/problems/most-frequent-subtree-sum/description/
class Solution {
public:
int dfs(TreeNode* root, unordered_map< int, int >& cnter ) {
if (!root) return 0;
// cnter[ root->val ] ++;
int v = root->val;
v += dfs(root->left, cnter);
v += dfs(root->right, cnter);
cnter[v] ++;
return v;
}
vector<int> findFrequentTreeSum(TreeNode* root) {
vector<int> ret;
if (!root) return ret;
unordered_map<int, int> cnter;
dfs(root, cnter);
int mx = 0;
for (auto v: cnter) {
mx = max(mx, v.second);
}
for (auto v:cnter) {
if (v.second == mx) {
ret.push_back( v.first );
}
}
return ret;
}
};