给你一个含重复值的二叉搜索树(BST)的根节点 root
,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
- 结点左子树中所含节点的值 小于等于 当前节点的值
- 结点右子树中所含节点的值 大于等于 当前节点的值
- 左子树和右子树都是二叉搜索树
示例 1:
输入:root = [1,null,2,2] 输出:[2]
示例 2:
输入:root = [0] 输出:[0]
思路:找到二叉搜索树中出现次数最多的数,统计一个数组中出现次数最多的数字我们很熟悉,这里只是套了个数的外壳,我们可以先遍历得到树的结点的数组,然后就是对数组的操作了,在这里什么遍历方式都无所谓了,只要遍历完所有的结点,用字典记录下每个值出现的次数,然后得到最大出现次数,若这个值的出现次数等于最大次数,将这个值放入result。
代码(python):
class Solution(object):
def findMode(self, root):
count_dict = {} #字典,记录每个值出现的次数
def traversal(node):
if not node:
return
traversal(node.left)
count_dict[node.val] = count_dict.get(node.val, 0) + 1
traversal(node.right)
traversal(root)
result = []
maxNum = max(count_dict.values()) #最多的出现次数
for key,value in count_dict.items():
if value == maxNum:
result.append(key)
return result