vector<int> findMode(TreeNode* root) {
vector<int> res;
unordered_map<int,int> m;
bianLi(root,m);
int max=0;
for(auto it=m.begin();it!=m.end();++it)
max=it->second>max?it->second:max;
for(auto it=m.begin();it!=m.end();++it){
if(it->second==max)
res.push_back(it->first);
}
return res;
}
void bianLi(TreeNode* root,unordered_map<int,int> &m){
if(!root) return ;
m[root->val]++;
bianLi(root->left,m);
bianLi(root->right,m);
}
改进后的程序
vector<int> findMode(TreeNode* root) {
vector<int> res;
unordered_map<int,int> m;
int max=0;
bianLi(root,m,max);
for(auto it=m.begin();it!=m.end();++it){
if(it->second==max)
res.push_back(it->first);
}
return res;
}
void bianLi(TreeNode* root,unordered_map<int,int> &m,int & mm){
if(!root) return ;
mm=max(mm,++m[root->val]);
bianLi(root->left,m,mm);
bianLi(root->right,m,mm);
}