首页 > 其他分享 >代码随想录 -- 二叉树 -- 二叉搜索树中的众数

代码随想录 -- 二叉树 -- 二叉搜索树中的众数

时间:2024-09-14 23:49:28浏览次数:11  
标签:arr last -- res self 随想录 value 二叉树 root

501. 二叉搜索树中的众数 - 力扣(LeetCode)

思路:

定义一个字典1,key 为二叉树的值,value 为二叉树的值出现的次数。

定义一个字典2,key 为二叉树的值出现的次数,value (列表)为二叉树的值。

找出字典2 中最大的 key,返回其 value 即可。 

class Solution(object):
    def createDic(self,root,dic):
        if root==None:
            return
        if root.val in dic:
            dic[root.val]+=1
        else:
            dic[root.val]=1
        self.createDic(root.left,dic)
        self.createDic(root.right,dic)

    def findMode(self, root):
        valDic=dict()
        self.createDic(root,valDic)
        dic2=dict()
        arr=[]
        for key,value in valDic.items():
            arr.append(value)
            if value in dic2:
                dic2[value].append(key)
            else:
                dic2[value]=[key]
        maxNum=max(arr)
        return dic2[maxNum]

题解思路:

中序遍历二叉树得到有序数组,统计数组中的众数。

class Solution(object):
    def tra(self,root,arr):
        if root==None:
            return
        self.tra(root.left,arr)
        arr.append(root.val)
        self.tra(root.right,arr)

    def findMode(self, root):
        arr=[]
        self.tra(root,arr)
        if len(arr)==0:
            return
        last=arr[0]
        count=1
        maxCount=1
        res=[last]
        for i in range(1,len(arr)):
            if arr[i]==last:
                count+=1
                if count>maxCount:
                    res=[]
                    res.append(last)
                    maxCount=count
                if count==maxCount and last not in res:
                    res.append(last)
            else:
                if maxCount==1:
                    res.append(arr[i])
                count=1
                last=arr[i]
        return res

标签:arr,last,--,res,self,随想录,value,二叉树,root
From: https://blog.csdn.net/weixin_56989647/article/details/142214448

相关文章

  • 云服务器安装redis
    第一步:上传redis压缩安装包到服务器       wgethttps://download.redis.io/releases/redis-5.0.4.tar.gz第二步:将压缩安装包解压        tar-xvfredis-xxx.tar.gz第三步:进入redis的目录,编译redis,执行命令:make        cdr......
  • WPF this.DragMove() DropShadowEffect
    //xaml<Windowx:Class="WpfApp367.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.mi......
  • 软件工程导论——个人项目之论文查重
    软件工程导论——个人项目之论文查重这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220这个作业的目标设计一个论文查重算法并实现;学会Git版本控制......
  • 【数据库系统实用教程】 第一章 数据库系统概述
    1.1基本概念1.数据什么是数据:数据是现实世界中客体在计算机中的抽象表示,具体的说,它是一种存储于计算机内的符号串。数据的特性:(1)数据表现形式的多样性(2)数据的可构造性:数据分为结构化数据、半结构化数据和非结构化数据。结构化数据有型(type)和值(value)之分。结构化数......
  • 事务系统
    事务系统事务介绍事务:保证原子性、隔离性、一致性、持久性(ACID)的一个或多个数据库操作只有当事务处于提交或中止的状态,一个事务的生命周期才算结束开启一个事务,输入以下一条语句后,就可以开始写若干条该事务的语句BEGIN;STARTTRANSACTION;可加入修饰符READONLY:只读......
  • 日志系统
    日志系统redolog重做日志redolog为InnoDB引擎特有的物理日志,记录了:“在某个数据页上做了什么修改”的操作,循环写入,具备着占用空间小、顺序写磁盘的优点writepos作为当前记录的位置,一边写一边顺时针移动;checkpoint作为当前要擦除的位置,一边擦出一边顺时针移动,在擦除记录前......
  • 栈-队列
    AcWing828.模拟栈模板题:实现一个栈,栈初始为空,支持四种操作:pushx–向栈顶插入一个数x;pop–从栈顶弹出一个数;empty–判断栈是否为空;query–查询栈顶元素。现在要对栈进行MM个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,......
  • 日记
    不知道该怎么学了,反正whk+竞赛的日子是一点也过不下去了。为什么现在学竞赛都没了动力呢。为什么每天晚上回家必破防呢。为什么压抑一天的心情只有靠晚上回家1h听歌才能好受一点呢。我真的好想归于平凡,到一个无忧无虑的桃花源班级。我普遍认为,现在一个学校对于顶尖学生,更......
  • 高可用架构
    高可用架构主备一致基本原理M-S架构:客户端的读写都直接访问A库,直到切换时把客户端读写切换给B库,A变成备库备库设置为readonly状态:防止切换过程出现双写,可以用readonly状态判断节点的角色基本原理:主库A和备库B之间维持一个长连接,主库内部有一个线程专门用于服务B的这个长连......
  • 主从库与切片集群机制
    主从库与切片集群机制主从复制源码剖析redis的主从复制主要包括全量复制RDB文件,增量复制,长连接同步,使用了基于状态机的设计思想,来实现不同状态和状态间的跳转基于状态机实现的话,在开发程序时只需要考虑不同状态下具体要执行的操作,以及状态之间的跳转条件即可四大阶段初始化......