二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
示例 1:
输入:root = [1,null,2,2]
输出:[2]
1. 在主函数中求众数,也就是在有序序列中求众数。
2. 因为可能存在多个众数,我们用 cnt 记录当前元素重复的次数,
用 maxCnt 记录已经遍历过的元素当中出现最多的元素的出现次数,用 res 记录众数。
# 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]:
lst = []
self.In0rder(root, lst)
# 记录前一个元素值
pre = lst[0]
# 记录次数
cnt = 1
# 记录最大次数
maxCnt = 1
# 记录结果
res = [lst[0]]
for i in range