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

 参考代码:

代码随想录

相关内容

热门资讯

不再烧钱换规模后,VC锚定AI... 近日,全球化AI互动娱乐平台海艺(SeaArt)宣布完成超亿元B轮融资。本轮融资由视觉中国、华盖创赢...
澜起科技股价涨5.01%,融通... 7月24日,澜起科技涨5.01%,截至发稿,报236.80元/股,成交97.59亿元,换手率3.69...
澜起科技股价涨5.01%,长江... 7月24日,澜起科技涨5.01%,截至发稿,报236.80元/股,成交97.80亿元,换手率3.70...
华蓝集团涨2.03%,成交额2... 7月24日,华蓝集团盘中上涨2.03%,截至13:13,报19.10元/股,成交2867.78万元,...