链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/

题解:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/solution/er-cha-shu-zhong-xu-bian-li-de-liang-chong-fang-sh/

暴力解法:

class Solution {
private:void searchBST(TreeNode* cur, unordered_map<int, int>& map) { // 前序遍历if (cur == NULL) return ;map[cur->val]++; // 统计元素频率searchBST(cur->left, map);searchBST(cur->right, map);return ;
}
bool static cmp (const pair<int, int>& a, const pair<int, int>& b) {return a.second > b.second;
}
public:vector<int> findMode(TreeNode* root) {unordered_map<int, int> map;vector<int> result;if (root == NULL) return result;searchBST(root, map);vector<pair<int, int>> vec(map.begin(), map.end());sort(vec.begin(), vec.end(), cmp); // 给频率排个序result.push_back(vec[0].first);for (int i = 1; i < vec.size(); i++) {if (vec[i].second == vec[0].second) result.push_back(vec[i].first);else break;}return result;}
};

    List<Integer> mList = new ArrayList<>();int curent = 0;//表示当前节点的值int count = 0;//表示当前节点的数量int maxCount = 0;//最大的重复数量public int[] findMode(TreeNode root) {inOrderTraversal(root);int[] res = new int[mList.size()];//把集合list转化为数组for (int i = 0; i < mList.size(); i++) {res[i] = mList.get(i);}return res;}//递归方式public void inOrderTraversal(TreeNode node) {//终止条件判断if (node == null)return;//遍历左子树inOrderTraversal(node.left);//下面是对当前节点的一些逻辑操作int nodeValue = node.val;if (nodeValue == curent) {//如果节点值等于curent,count就加1count++;} else {//否则,就表示遇到了一个新的值,curent和count都要//重新赋值curent = nodeValue;count = 1;}if (count == maxCount) {//如果count == maxCount,就把当前节点加入到集合中mList.add(nodeValue);} else if (count > maxCount) {//否则,当前节点的值重复量是最多的,直接把list清空,然后//把当前节点的值加入到集合中mList.clear();mList.add(nodeValue);maxCount = count;}//遍历右子树inOrderTraversal(node.right);}
class Solution {
private:int count;int maxCount;TreeNode* pre;vector<int> result;void searchBST(TreeNode* cur) {if (cur == NULL) return ;searchBST(cur->left);       // 左// 中if (pre == NULL) { // 第一个节点count = 1;} else if (pre->val == cur->val) { // 与前一个节点数值相同count++;} else { // 与前一个节点数值不同count = 1;}pre = cur; // 更新上一个节点if (count == maxCount) { // 如果和最大值相同,放进result中result.push_back(cur->val);}if (count > maxCount) { // 如果计数大于最大值maxCount = count;result.clear();     // 很关键的一步,不要忘记清空result,之前result里的元素都失效了result.push_back(cur->val);}searchBST(cur->right);      // 右return ;}public:vector<int> findMode(TreeNode* root) {int count = 0; // 记录元素出现次数int maxCount = 0;TreeNode* pre = NULL; // 记录前一个节点result.clear();searchBST(root);return result;}
};

501.二叉搜索树中的众数相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. leetcode 501. 二叉搜索树中的众数 思考分析

    目录 题目 1.不考虑BTS性质,直接寻找众数集合(利用map) 2.考虑BTS的中序遍历结果性质 题目 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假 ...

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

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

最新文章

  1. javascript 执行环境细节分析、原理-12
  2. 主流云服务器购买平台
  3. Spring配置C3P0开源连接池
  4. python 判断子序列_LeetCode 392. 判断子序列 | Python
  5. 29. 栈的push,pop序列
  6. 7-4 jmu-Java-03面向对象基础-04-形状-继承 (15 分)
  7. Java开发笔记(一百零三)线程间的通信方式
  8. 面向对象三种模型之间的关系
  9. 怎么让sql查询的字段可以不出现在group分组里_在工作中常用到的SQL
  10. CMU | 深度学习模型中集成优化、约束和控制
  11. u 去除index.php,ThinkPHP去除url中的index.php
  12. Nginx的启动、停止、重启
  13. [转]用 ASP.NET 2.0 改进的 ViewState 加快网站速度
  14. java9最新下载_java9下载_java9官方版下载 32位64位 最新版_天天下载手机版
  15. 软件测试流程图及描述
  16. 关于公司要不要设立测试的讨论
  17. Golang panic:WaitGroup is reused before previous Wait has returned
  18. 六个方法帮你写走心的文案
  19. JavaScript读书笔记四
  20. linux x11 错误,出现致命错误:X11/Xlib.h:没有那个文件或目录

热门文章

  1. 【呆萌の研究】JavaScript常见的继承方式
  2. 脚本学习python和linux-shell和jQuery(javascript)
  3. 如何使用svconfigeditor.exe编辑WCF Service配置文件-配置一个基本的Endpoint(一)
  4. Linux 命令(124)—— lsof 命令
  5. swagger 配置- ssm
  6. java Calendar的学习分享
  7. 编程的一些经历和感想
  8. django系列3.3--CBV 和 FBV
  9. Java集合框架之接口Collection源码分析
  10. Float,Double单双精度在线转换成二进制