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

目录

    • 题目
    • 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;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二、模型评估方法

IDE为Jupyter Notebook scikit-learn官网 scikit-learn是一个专门用于机器学习的工具包 运用到啥函数不知道咋使用&#xff1f;戳它–>scikit-learn工具包的API文档 不知道用啥模板&#xff1f;戳它–>scikit-learn样例模型 功能翻译Classification分类Regression回归Cl…

union

关键字 1. 共用体声明和共用体变量定义共用体(参考“共用体”百科词条)是一种特殊形式的变量&#xff0c;使用关键字union来定义共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似。其形式为:union 共用体名{数据类型 成员名;数据类型 成员名;...} 变量…

SEL

Object-C 中的Selector 概念 Andrew Huang <bluedrum163.com> 转载请注明作者和联络方式 在iphone程序中会大量看到selector这样的用法。<<iphone开发基础>花了很大一个篇幅来解析这个语法&#xff0c;但是不知 是翻译问题&#xff0c;还是解释过细&#xff0c…

Java Calendar add()方法与示例

日历类的add()方法 (Calendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to perform add or subtract the given amount of time to the given cal_fi (calendar field). add()方法用于对指定…

三、线性回归实验分析

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

leetcode 236. 二叉树的最近公共祖先 思考分析

目录题目思考分析改进本文章代码思路来源于公众号【代码随想录】题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、…

轻轻松松给PCB板添加LOGO

在 PCB 图中放置汉字或图形的方法&#xff1a;A、文字——> 图片——> PCB 图——> 复制到自己作品中B、图片——> PCB 图——> 复制到自己作品中1、首先准备好“BMP”格式的图片&#xff0c;在图片中依靠颜色分辨图层&#xff0c;所以最好准备“单色黑白”图。…

java bitset_Java BitSet clone()方法及示例

java bitsetBitSet类clone()方法 (BitSet Class clone() method) clone() method is available in java.util package. clone()方法在java.util包中可用。 clone() method is used to clone this Bitset or in other words, this method is used to create a Bitset that is si…

小技巧

//屏蔽下拉框的某一个选项 <disabled"disable">... 1 <html>2 <body>3 4 <select>5 <option>Volvo</option>6 <option>Saab</option>7 <option disabled"disabled">Mercedes</option>…

jquery中text val html attr的差别

html和innerHTMl是一样的&#xff0c;可以获得和设置html标签文本如&#xff1a;设置值&#xff1a;$("p").html("<span stylefont-size:13px;color:red>HTML标签文本</span>"); 获得值&#xff1a;$("p").html(); text和innerText是…

leetcode 235. 二叉搜索树的最近公共祖先 思考分析

目录题目思考迭代法题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff0…

四、逻辑回归

逻辑回归logistic_regression(LR)其实是分类算法&#xff0c;而不是回归算法。 回归算法得到的是一个数&#xff0c;分类算法得到的是几个不同的类别。 逻辑回归就是通过函数将值转换为0-1之间&#xff0c;形成概率问题&#xff0c;从而实现了不同类别的分类。 Sigmoid 函数 …

db,dbms,dba_DBMS中的数据库管理员(DBA)

db,dbms,dba数据库管理员(DBA) (Database Administrator (DBA)) To use the Database Management System, it is necessary to have central control over data and programs together in order to access such data. A person who has central control over such system is re…

运算符优先级

转载于:https://www.cnblogs.com/c-cloud/p/3280911.html

五、逻辑回归实验分析

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

二叉搜索树的插入、删除、修剪、构造操作(leetcode701、450、669、108)

目录1、leetcode 701. 二叉搜索树中的插入操作1、题目2、递归法3、迭代法2、leetcode 450. 二叉搜索树中的插入操作1、题目2、思路递归法3、迭代法4、删除结点的两个方法以及注意点3、leetcode 669. 修剪二叉搜索树1、题目2、思考与递归3、迭代法4、leetcode 108. 将有序数组转…

Memcached查看和清理

1.一种telnet localhost 11211 #登陆stats #查看状态flush_all #清理quit #退出2.又学到一个:echo flush_all | nc localhost 112113.1、数据存储(假设key为test,value为12345) printf "set test 0 1 5\r\n12345\r\n" | nc localhost 11211STORED2.数据取回(假设key为…

模拟退火算法解决np_P和NP问题与解决方案| 演算法

模拟退火算法解决npP问题 (P Problems) P is the set of all the decision problems solvable by deterministic algorithms in polynomial time. P是多项式时间内确定性算法可解决的所有决策问题的集合。 NP问题 (NP Problems) NP is the set of all the decision problems t…

POJ2251Dungeon Master

http://poj.org/problem?id2251 题意 &#xff1a; 就是迷宫升级版&#xff0c;从以前的一个矩阵也就是一层&#xff0c;变为现在的L层&#xff0c;" . "是可以走&#xff0c;但是“#”不可以走&#xff0c;从S走到E&#xff0c;求最短的路径&#xff0c;若是找不到…

六、聚类算法

一、聚类概念 1&#xff0c;通俗易懂而言&#xff0c;聚类主要运用于无监督学习中&#xff0c;也就是将没有标签的东西如何分为几堆儿。 2&#xff0c;无监督学习即没有标签&#xff0c;不知道这些玩意到底是啥。当然&#xff0c;有监督学习就是由标签&#xff0c;我们是提前知…