501.二叉搜索树中的众数
链接: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.二叉搜索树中的众数相关推荐
- [力扣] 501. 二叉搜索树中的众数
501 二叉搜索树中的众数 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 例如: 给定 BST [1,null,2,2], 返回[2]. 提示:如果众数超 ...
- Suzy找到实习了吗 Day 21 | 二叉树进行中:530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先
530. 二叉搜索树的最小绝对差 题目 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 .差值是一个正数,其数值等于两值之差的绝对值. solution # Defi ...
- LeetCode 501. 二叉搜索树中的众数(中序遍历)
文章目录 1. 题目 2. 中序遍历 1. 题目 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假定 BST 有如下定义: 结点左子树中所含结点的值小于等 ...
- 74. Leetcode 501. 二叉搜索树中的众数 (二叉搜索树-中序遍历类)
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素).如果树中有不止一个众数,可以按 任意顺序 返回.假定 BST 满足如下定义:结 ...
- leetcode系列-501. 二叉搜索树中的众数
题目描述:给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素).如果树中有不止一个众数,可以按 任意顺序 返回.假定 BST 满足如 ...
- LeetCode 501. 二叉搜索树中的众数
https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/ 难度:简单 给定一个有相同值的二叉搜索树(BST),找出 BST ...
- leetcode 501. 二叉搜索树中的众数(Java版)
题目 https://leetcode-cn.com/problems/find-mode-in-binary-search-tree/ 题解 中序遍历二叉搜索树,可以得到一个有序序列. 遍历这个有序 ...
- LeetCode 501二叉搜索树中的众数-简单
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当 ...
- leetcode 501. 二叉搜索树中的众数 思考分析
目录 题目 1.不考虑BTS性质,直接寻找众数集合(利用map) 2.考虑BTS的中序遍历结果性质 题目 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假 ...
- 力扣501. 二叉搜索树中的众数(JavaScript)
//使用双指针记录同一值的出现次数 var findMode = function(root) {let p=rootlet count=0 //次数let max=1let arr=[]const ...
最新文章
- javascript 执行环境细节分析、原理-12
- 主流云服务器购买平台
- Spring配置C3P0开源连接池
- python 判断子序列_LeetCode 392. 判断子序列 | Python
- 29. 栈的push,pop序列
- 7-4 jmu-Java-03面向对象基础-04-形状-继承 (15 分)
- Java开发笔记(一百零三)线程间的通信方式
- 面向对象三种模型之间的关系
- 怎么让sql查询的字段可以不出现在group分组里_在工作中常用到的SQL
- CMU | 深度学习模型中集成优化、约束和控制
- u 去除index.php,ThinkPHP去除url中的index.php
- Nginx的启动、停止、重启
- [转]用 ASP.NET 2.0 改进的 ViewState 加快网站速度
- java9最新下载_java9下载_java9官方版下载 32位64位 最新版_天天下载手机版
- 软件测试流程图及描述
- 关于公司要不要设立测试的讨论
- Golang panic:WaitGroup is reused before previous Wait has returned
- 六个方法帮你写走心的文案
- JavaScript读书笔记四
- linux x11 错误,出现致命错误:X11/Xlib.h:没有那个文件或目录