Day104 | 灵神 | 二叉树 出现次数最多的子树元素和
508.出现次数最多的子树元素和
508. 出现次数最多的子树元素和 - 力扣(LeetCode)
思路:
思路就是遍历一遍二叉树然后用map给它的频率都记录下来,再对频率排序,把最大的输出到一个vector里面返回就是了
注意:C++的map不能直接对sort使用lambda实现对value的排序,需要先把map转化为vector<pair>才可以
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
   | class Solution { public:     map<int,int> q;     int maxCnt=0;          int tra(TreeNode *t)     {         if(t==nullptr)             return 0;         int sum=tra(t->left)+tra(t->right)+t->val;         q[sum]++;         maxCnt=max(maxCnt,q[sum]);         return sum;     }     vector<int> findFrequentTreeSum(TreeNode* root) {         tra(root);                  vector<pair<int,int>> p(q.begin(),q.end());         sort(p.begin(),p.end(),[](const auto& a, const auto& b)->bool{             return a.second > b.second;         });         vector<int> res;         for(auto c:p)         {             if(c.second==maxCnt)                 res.push_back(c.first);         }         return res;     } };
  |