这道题我用后序遍历把所有子树和都放在一个map里面保存,然后找到最大的次数并输出即可。
map<int,int> m;
int houxu(TreeNode *root) {
if (!root) return 0;
int sum = root -> val;
sum += houxu(root->left);
sum += houxu(root->right);
m[sum]++;
return sum;
}
vector<int> findFrequentTreeSum(TreeNode* root) {
vector<int> vec;
if (!root) return vec;
houxu(root);
int max = 0;
map<int,int>::iterator it;
for (it = m.begin();it != m.end();it++) {
if (it -> second > max) max = it->second;
}
for (it = m.begin();it != m.end();it++) {
if (it->second == max) vec.push_back(it->first);
}
return vec;
}