501. 二叉搜索树中的众数

501. 二叉搜索树中的众数

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def findMode(self, root: Optional[TreeNode]) -> List[int]:
        self.mode = []
        self.curCount = 0
        self.maxCount = 0
        self.prev = None
        self.traverse(root)
        return self.mode 
    
    def traverse(self, root):
        if not root:
            return

        self.traverse(root.left)

        if not self.prev:
            self.curCount = 1
            self.maxCount = 1
            self.mode.append(root.val)
        else:

            if root.val == self.prev.val:
                self.curCount += 1
                # root.val 是众数
                if self.curCount == self.maxCount:
                    self.mode.append(root.val)
                elif self.curCount > self.maxCount:
                    # 更新众数
                    self.mode.clear()
                    self.maxCount = self.curCount
                    self.mode.append(root.val)

            if root.val != self.prev.val:
                # root.val 不重复的情况
                self.curCount = 1
                if self.curCount == self.maxCount:
                    self.mode.append(root.val)

        # 更新prev 
        self.prev = root
        self.traverse(root.right)
相关推荐
Dream it possible!3 小时前
LeetCode 面试经典 150_二叉树_二叉树展开为链表(74_114_C++_中等)
c++·leetcode·链表·面试·二叉树
点云SLAM1 天前
算法与数据结构之二叉树(Binary Tree)
数据结构·算法·二叉树·深度优先·广度优先·宽度优先
飞鱼&3 天前
java数据结构
数据结构·二叉树·散列表·红黑树
ShineWinsu5 天前
对于数据结构:堆的超详细保姆级解析——下(堆排序以及TOP-K问题)
c语言·数据结构·c++·算法·面试·二叉树·
ShineWinsu8 天前
对于数据结构:堆的超详细保姆级解析—上
数据结构·c++·算法·计算机·二叉树·顺序表·
_OP_CHEN13 天前
C++进阶:(三)深度解析二叉搜索树原理及实现
开发语言·数据结构·c++·二叉树·二叉搜索树·键值对
草莓工作室20 天前
数据结构12:二叉树的API及其实现
c语言·数据结构·二叉树
GawynKing1 个月前
红黑树-带源码
数据结构·算法·二叉树··红黑树
希赛网1 个月前
软考软件设计师常考知识点:(三)数据结构
数据结构·二叉树·字符串·软考·软件设计师·线性表
Haooog1 个月前
98.验证二叉搜索树(二叉树算法题)
java·数据结构·算法·leetcode·二叉树