目录

  • 题目
  • 1、不考虑BTS性质,直接寻找众数集合(利用map)
  • 2、考虑BTS的中序遍历结果性质

题目

给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树

1、不考虑BTS性质,直接寻找众数集合(利用map)

这种方法没有考虑性质,同时消耗了额外的空间。
同时要注意,按照value值排序是没有内置函数的,得先将map转换为vector,然后自定义sort的规则,对pair类型数据的第二个值按照从大到小进行排序。

/*** 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 {private:void traversal(TreeNode* cur,unordered_map<int,int>& map){if(cur == NULL ) return ;//以结点值为key,结点值出现的频次为map值map[cur->val]++;traversal(cur->left,map);traversal(cur->right,map);return ;}//定义sort排序的规则,以二维数组的第二维从大到小排序bool static cmp(const pair<int,int>& a,const pair<int,int>& b){if(a.second>b.second) return 1;else return 0;}
public:vector<int> findMode(TreeNode* root) {unordered_map<int,int> map;vector<int> result;if(root == NULL) return result;traversal(root,map);//将map转化为vector(二维数组),以便于下一步的排序vector<pair<int,int>> vec(map.begin(),map.end());sort(vec.begin(),vec.end(),cmp);//vec第一个元素是频次最高的,然后继续寻找与之频次一样的元素for(int i=0;i<vec.size();i++){if(vec[i].second == vec[0].second) result.push_back(vec[i].first);else break;}return result;}
};

2、考虑BTS的中序遍历结果性质

中序遍历的结果是递增的,所以我们只需要比较此结点与上结点是否相等,从而累加频次,然后更新最大频次,更新结果数组,保证众数集合就行了。

/*** 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 {private:int MaxCount;int count;TreeNode* pre = NULL;vector<int> result;void traversal(TreeNode* cur){if(cur == NULL ) return;traversal(cur->left);if(pre == NULL){count = 1;}else if(pre->val == cur->val){count++;}else{count = 1;}pre = cur;//如果出现次数也是最大次数,说明此元素也属于众数集合,应当加入结果集if(count == MaxCount) result.push_back(cur->val);//如果最大次数被更新,那么得清除旧结果if(count > MaxCount){MaxCount =  count;result.clear();result.push_back(cur->val);}traversal(cur->right);return ;}
public:vector<int> findMode(TreeNode* root) {MaxCount = 0;count = 0;pre = NULL;result.clear();traversal(root);return result;}
};

leetcode 501. 二叉搜索树中的众数 思考分析相关推荐

  1. LeetCode 501. 二叉搜索树中的众数(中序遍历)

    文章目录 1. 题目 2. 中序遍历 1. 题目 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假定 BST 有如下定义: 结点左子树中所含结点的值小于等 ...

  2. 74. Leetcode 501. 二叉搜索树中的众数 (二叉搜索树-中序遍历类)

    给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素).如果树中有不止一个众数,可以按 任意顺序 返回.假定 BST 满足如下定义:结 ...

  3. LeetCode 501. 二叉搜索树中的众数

    https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/ 难度:简单   给定一个有相同值的二叉搜索树(BST),找出 BST ...

  4. leetcode 501. 二叉搜索树中的众数(Java版)

    题目 https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/ 题解 中序遍历二叉搜索树,可以得到一个有序序列. 遍历这个有序 ...

  5. LeetCode 501二叉搜索树中的众数-简单

    给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当 ...

  6. [力扣] 501. 二叉搜索树中的众数

    501 二叉搜索树中的众数 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 例如: 给定 BST [1,null,2,2], 返回[2]. 提示:如果众数超 ...

  7. Suzy找到实习了吗 Day 21 | 二叉树进行中:530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先

    530. 二叉搜索树的最小绝对差 题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 .差值是一个正数,其数值等于两值之差的绝对值. solution # Defi ...

  8. leetcode系列-501. 二叉搜索树中的众数

    题目描述:给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素).如果树中有不止一个众数,可以按 任意顺序 返回.假定 BST 满足如 ...

  9. 力扣501. 二叉搜索树中的众数(JavaScript)

    //使用双指针记录同一值的出现次数 var findMode = function(root) {let p=rootlet count=0 //次数let max=1let arr=[]const ...

最新文章

  1. 优化算法、梯度下降、SGD、Momentum、Adagrad、Adam
  2. 谈谈自己对java的学习看法
  3. android与python交互_Android与Python混合编程
  4. 《Debug Hacks》和调试技巧
  5. Spring Bean引用例子
  6. IDEA远程调试服务器代码
  7. pythonwhile循环实战教程_Python入门丨for循环和while循环
  8. Redundant Paths POJ - 3177(tarjan+边双连通分量)
  9. SQL Server Profiler
  10. spark学习-38-Spark的MemoryManager
  11. python十进制转二进制,八进制和十六进制
  12. Oracle Database 11g 下载
  13. SSM常用面试题整理一
  14. linux qdel强制删除任务,SGE:qsub/qstat/qdel/qhost 任务投递和监控
  15. 阿里云发布黑科技:面对海量的文本翻译任务,阿里翻译团队是如何解决的
  16. 秣小白的C语言旅程——第二站(含自我介绍)
  17. 微信小程序开发之——仿微信视频录制上传
  18. 衬线字体和无衬线字体
  19. 一级B计算机钱2021,2021年9月全国计算机一级WPS真题及答案(9)
  20. 删除计算机病毒怎么办,电脑软件客户端被误报病毒而删除了怎么办?

热门文章

  1. uniapptabbar的高度是多少_【报Bug】uniapp页面底部空出了tabBar的高度
  2. CSDN Chrome插件来啦,听说可以提升开发者效率,我们先来研究一波
  3. nsct matlab,图像融合 NSCT算法 matlab
  4. dcc garch matlab,如何用Eviews或者MATLAB实现DCC-garch模型?
  5. matlab dtft的函数,DTFT的Matlab矩阵计算的理解
  6. vue中通过js控制页面样式方法
  7. 深入了解React组件重新渲染的条件和生命周期
  8. (网页)中的简单的遮罩层
  9. 阅读react-redux源码 - 一
  10. 常见的虚拟机需要配置的服务