[LeetCode]508. Most Frequent Subtree Sum

    xiaoxiao2021-03-25  93

    [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

    最新回复(0)