class Solution {
public:
void clearVector(vector<int>& res)
{
while (!res.empty())
res.pop_back();
}
void inOrderTraversal(TreeNode* root, vector<int>& Nodes)
{
if (root == nullptr)
return;
else
{
inOrderTraversal(root->left, Nodes);
Nodes.push_back(root->val);
inOrderTraversal(root->right, Nodes);
}
}
vector<int> findMode(TreeNode* root) {
int maxCount = 1;
vector<int> res;
vector<int> Nodes;
unordered_map<int, int> map;
inOrderTraversal(root, Nodes);
for (int i = 0; i < Nodes.size(); i++)
{
auto it = map.find(Nodes[i]);
if (it == map.end())
{
map.insert(pair<int, int>(Nodes[i], 1));
}
else
{
it->second++;
}
}
for (const auto& pair : map)
{
if (pair.second > maxCount)
{
maxCount = pair.second;
clearVector(res);
res.push_back(pair.first);
}
else if (pair.second == maxCount)
{
res.push_back(pair.first);
}
}
return res;
}
};