508. Most Frequent Subtree Sum
5
/ \
2 -3 5
/ \
2 -5int helper(TreeNode*node, unordered_map<int, int>& m) {
if (!node) return 0;
int left = helper(node->left, m);
int right = helper(node->right, m);
int res = left + node->val + right;
++m[res];
return res;
}
vector<int> findFrequentTreeSum(TreeNode* root) { // time: O(n); space: O(n)
vector<int> res;
unordered_map<int, int> m; // sum->times
helper(root, m);
int mx = 0;
for (auto& e : m) {
if (e.second >= mx) {
if (e.second > mx) {
mx = e.second;
res.clear();
}
res.push_back(e.first);
}
}
return res;
}Last updated