一、题目
二、代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution
{
public:
//二叉搜索树: 核心提要
//中序遍历二叉树等于遍历有序数组
void recursion(TreeNode* process_node,vector<int>& min_to_max)
{
if(process_node->left) recursion(process_node->left,min_to_max);
min_to_max.push_back(process_node->val);
if(process_node->right) recursion(process_node->right,min_to_max);
}
vector<int> findMode(TreeNode* root)
{
vector<int> min_to_max;
int i,j;
map<int,int> my_map;
map<int,int>::iterator it;
int max_occur=0;
vector<int> return_vector;
recursion(root,min_to_max); //遍历二叉树
// for(i=0;i<min_to_max.size();i++)
// {
// std::cout<<min_to_max[i]<<" ";
// }
// std::cout<<std::endl;
for(i=0;i<min_to_max.size();i++) //构造字典
{
it=my_map.find(min_to_max[i]);
if(it!=my_map.end())
{
it->second++;
}
else
{
my_map.insert(pair<int, int>(min_to_max[i], 1));
}
}
for(it=my_map.begin();it!=my_map.end();it++) //寻找最大出现次数
{
if(it->second>max_occur) max_occur=it->second;
}
for(it=my_map.begin();it!=my_map.end();it++) //获得众数
{
if(it->second==max_occur)
{
return_vector.push_back(it->first);
}
}
return return_vector;
}
};