这道题我用后序遍历把所有子树和都放在一个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;
}

本文介绍了一种使用后序遍历的方法来找出二叉树中出现频率最高的子树和,并通过一个map记录每个子树的和及其出现次数。

2万+

被折叠的 条评论
为什么被折叠?



