501. 二叉搜索树中的众数 递归法,拓展:普通二叉树求众数
创始人
2024-03-19 03:40:32

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

示例 1:

输入:root = [1,null,2,2]
输出:[2]

示例 2:

输入:root = [0]
输出:[0]

提示:

  • 树中节点的数目在范围 [1, 104]
  • -105 <= Node.val <= 105

进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)

 法一:若为普通二叉树,并不是二叉搜索树的做法:采用unordered_map

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
private:bool static cmp(const pair& a,const pair& b){return a.second>b.second;}void inorder(TreeNode* root,unordered_map& res){if(root){inorder(root->left,res);res[root->val]++;inorder(root->right,res);}}
public:vector findMode(TreeNode* root) {vector ans;if(!root) return ans;unordered_map res;inorder(root,res);vector> vec(res.begin(),res.end());sort(vec.begin(),vec.end(),cmp);ans.push_back(vec[0].first);for(int i=1;i

法二:利用二叉搜索树的特性,采用递归法

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
private:TreeNode* pre;int maxCount=INT_MIN;int count=0;void recursion(TreeNode* root,vector& res){if(root){recursion(root->left,res);if(pre==NULL){count=1;}else if(pre->val==root->val){count++;}else{count=1;}if(maxCount==count){res.push_back(root->val);}else if(maxCountval);maxCount=count;}pre=root;recursion(root->right,res);}}
public:vector findMode(TreeNode* root) {vector ans;recursion(root,ans);return ans;}
};

 参考代码:

代码随想录

相关内容

热门资讯

今天白天晴,最高气温11℃,中... 北京市气象台4日6时发布:今天白天晴,早晨东南部地区有轻雾,北转南风二三级,最高气温11℃;夜间晴间...
阐述湖南“担当”,托举百姓“幸... 曹忠平 李全胜 朱东铁 沈裕谋  2月3日,湖南省十四届人大四次会议第一场“厅长通道”开启,省民政厅...
汇聚文化产业强劲动能 文旅市场即将开启“史上最长春节假期”,冰雪游、避寒游等冬季特色产品人气旺盛;电影市场全力备战春节档,...
深化职业外语教改实践 打造课程... 立德树人是教育的根本任务,兼具语言工具性与文化人文性双重属性的职业外语课程,不仅是扎实开展课程思政的...
四川老年大学:乘势而上 书写阔... □丹童 (图片由四川老年大学提供)  2025年,四川老年大学捷报频传:在中国老年大学协会主办的全国...