leetcode508 Most Frequent Subtree Sum
一.
其实本题思想比较简单~
学习的更多的是map的用法
二.
(1)还有第一次运行效率只打败了20%的选手,但是一看其他人的C++程序,用的也是递归方法啊,但是运行只用18ms,我用了23ms,仔细一看,是在递归中就直接找到max了,而我重新定义函数找了一遍。
(2)反正要遍历map的所有元素,那么用unordered_map会更效率
三.
#include <iostream>
#include <map>
#include <vector>
using namespace std;
class Solution
{
public:
unordered_map <int,int> tongji;
vector <int> result;
int max;
int findmax(TreeNode* root)
{
int sum=0;
if(!root)
return 0;
else
{
sum=findmax(root->left)+findmax(root->right)+root->val;
tongji[sum]++;
if(tongji[sum]>max)
max = tongji[sum];
return sum;
}
}
vector<int> findFrequentTreeSum(TreeNode* root)
{
findmax(root);
//map <int,int>::iterator it;
/*for(it=tongji.begin();it!=tongji.end();it++)
{
if(it->second>max)
max=it->second;
}*/
unordered_map <int ,int > ::iterator it1;
for(it1=tongji.begin();it1!=tongji.end();it1++)
{
if(it1->second == max)
{
result.push_back(it1->first);
}
}
return result;
}
};