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;}
};

 参考代码:

代码随想录

相关内容

热门资讯

华尔街、贸易商齐声警告:霍尔木... 就在美国和伊朗就停战问题胶着拉扯之际,全球石油库存正在以创纪录的速度下降。华尔街分析师和能源贸易商警...
景林最新美股持仓曝光 加仓英特... 格隆汇5月10日|景林资产向美国证券交易委员会提交的季度持仓13-F表显示,该机构在去年底持有259...
全民追“光”!热门股抱团飙涨 ...   当前A股最耀眼的板块就是“光”,光模块、光纤、光器件、光芯片等概念股均是“热门行业里的热门股”,...
普京:坚决制止篡改二战历史图谋 △俄罗斯总统普京(资料图)俄罗斯总统普京9日在莫斯科克里姆林宫表示,必须坚决制止任何篡改二战历史和美...
禁飞通告 | 5月17日,长春... 长春市人民政府关于在马拉松赛事期间对低空慢速小目标航空器实施临时管控的通告2026一汽红旗长春马拉松...