首页 > 其他分享 >501. 二叉搜索树中的众数

501. 二叉搜索树中的众数

时间:2023-04-11 16:01:40浏览次数:50  
标签:count pre 树中 众数 inorder vec res root 501

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

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

假定 BST 满足如下定义:

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

class Solution {
public:
    void inorder(TreeNode* root){
        if(root == nullptr) return;
        mp[root->val]++;
        inorder(root->left);
        inorder(root->right);
    }
    vector<int> findMode(TreeNode* root) {
        inorder(root);
        vector<std::pair<int, int>> vec;
        for (const auto& item : mp)
        {
            vec.emplace_back(item);
        }
        std::sort(vec.begin(),vec.end(),
        [](const auto &a,const auto &b)->bool{  return a.second>b.second;});
        vector<int> res;
        int k = vec[0].second;
        for(const auto &x:vec){
            if(x.second == k) res.emplace_back(x.first);
        }
        return res;
    }
    void inorder_t(TreeNode* root){
        if(root == nullptr) return;
        inorder_t(root->left);
        if(pre == nullptr){
            count =  1;
        }
        else if(pre->val == root->val){
            count++;
        }
        else{
            count = 1;
        }
        pre = root;
        if(count == max){
            res.emplace_back(root->val);
        }
        if(count > max){
            res.clear();
            res.emplace_back(root->val);
            max = count;
        }
        inorder_t(root->right);
    }
    vector<int> findMode(TreeNode* root){
        count = 0;
        max = 0;
        this->pre = nullptr;
        res.clear();
        inorder_t(root);
        return res;
    }
private:
    std::unordered_map<int,int> mp;
    int count;
    int max;
    TreeNode* pre;
    vector<int> res;
};

标签:count,pre,树中,众数,inorder,vec,res,root,501
From: https://www.cnblogs.com/lihaoxiang/p/17306511.html

相关文章

  • 求众数
    #include<stdio.h>intnum=0;  //存放众数intmaxcount=0;   //存放重数voidsplit(inta[],intlow,inthigh,int&mid,int&left,int&right){  mid=(low+high)/2;  for(left=mid;left<=high;left--)  {    if(a[left]!=a[mid]){  ......
  • 700. 二叉搜索树中的搜索
    给定二叉搜索树(BST)的根节点root和一个整数值val。你需要在BST中找到节点值等于val的节点。返回以该节点为根的子树。如果节点不存在,则返回null。classSolution{public:TreeNode*searchBST(TreeNode*root,intval){if(root==nullptr)returnnu......
  • 1617. 统计子树中城市之间最大距离
    题目链接:1617.统计子树中城市之间最大距离方法:子集型回溯+判断连通+树的直径解题思路枚举所有可能的子树参考:子集型回溯判断当前的子树是否合法,即当前树是否连通,通过\(dfs\)从某一个节点开始遍历子树,若遍历节点数量不等于子树节点数量,则不连通;计算以每一个子树节点为......
  • day21| 530+501+236
    530.二叉搜索树的最小绝对差 题目简述:给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。差值是一个正数,其数值等于两值之差的绝对值。 思路:1.二叉搜索树的中序遍历是单调的2.可以证明,求这单调数组中的最小绝对差,拿出来比较的两个数一......
  • 代码随想录Day22-Leetcode235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,4
    235.二叉搜索树的最近公共祖先题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/又玩了一天,手又生疏了好多;这道题看了题解,先用公共解法了,之前的题没刷,就给现在留坑了/***Definitionforabinarytreenode.*functionTree......
  • 代码随想录Day20-Leetcode654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验
    654.最大二叉树题目链接:https://leetcode.cn/problems/maximum-binary-tree/基本的模拟思路很快/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undefined?0:val)*this.left=(left===undefined......
  • 1519. 子树中标签相同的节点数
    题目描述给了一些点的连通关系,每个点的值都不同,每个点上都哟一个附加的标签(小写字母)问:每个节点i的子树中标签和i相同的节点数f1-无向图后序遍历基本分析怎么根据连接关系进行遍历?先建图遍历的时候没有方向,怎么保证不会回去?加一个父节点的参数,保证不会往前走?怎么维护当前节......
  • 树:剑指 Offer 34. 二叉树中和为某一值的路径
    题目描述:给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。 示例1: 输入:root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22输出:[[5,4,11,2],[5,8,4,5]]......
  • 二叉搜索树中的众数
    LeetCode|501.二叉搜索树中的众数给你一个含重复值的二叉搜索树(BST)的根节点root,找出并返回BST中的所有众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按任意顺序返回。假定BST满足如下定义:结点左子树中所含节点的值小于等于当前节点的值结点右子树中所......
  • 2022-适用于 Windows 10 Version 1809 的 02 累积更新,适合基于 x64 的系统 (KB5010351
    2022-适用于Windows10Version1809的02累积更新,适合基于x64的系统(KB5010351)-错误0x800f0982系统是win10企业版LTSC版本可能安装的是精简版导致的运行疑难解答这个方案无效利用win10更新助手-因为是企业版TLSC版本所以用不了WIN10LTSC版更新失败如何解决?这......