递归:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> findMode(TreeNode* root) {
unordered_map<int, int> count; //纪录每一个节点数字的个数(键值对)
vector<int> result; //结果
int maxCount=0; // 最大个数,也就是众数
search(root,count,maxCount);
for (auto v: count) {
// 因为众数不止一个
if(v.second==maxCount){
result.push_back(v.first);
}
}
return result;
}
//遍历整棵树
void search(TreeNode* root,unordered_map<int, int> &count,int &maxCount){
if(root==nullptr) return;// 叶子节点结束
count[root->val]++; // 纪录加一
if(count[root->val]>maxCount) maxCount=count[root->val]; //纪录最大的个数(众数)
search(root->left,count,maxCount);// 遍历左节点
search(root->right,count,maxCount);//遍历右节点
}
};
本文同步分享在 博客“战 胜”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。