day21
值得一夸的是,思路想出一大半了
思路:
就是用双指针,不断比较 pre 和 当前结点的值是否相等
关键:
用当前出现的次数,与最大出现的次数比较
如果相等,就加入结果集
如果当前出现的次数更大,就更新最大出现次数,再清空结果集,把当前结点的值记录下来。
注意:
1.别忘了更新pre。。。。。。。。忘了两三次了
class Solution {
public:
TreeNode* pre = nullptr;
int showtime = 1;
int max = 0;
void traversal(TreeNode* root,vector<int> &vec)
{
if(root == nullptr)
return ;
traversal(root->left,vec);
if(pre != nullptr && pre->val == root->val)
{
showtime++;
}
else
showtime = 1;
if(showtime == max) // 处理当前出现的次数,与最大次数的比较
{
vec.push_back(root->val);
}
else if( showtime > max)
{
max = showtime;
vec.clear();
vec.push_back(root->val);
}
pre = root; // 老忘记更新!!
traversal(root->right, vec);
}
vector<int> findMode(TreeNode* root) {
vector<int> vec;
traversal(root, vec);
return vec;
}
};