501 二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:
结点左子树中所含节点的值 小于等于 当前节点的值
结点右子树中所含节点的值 大于等于 当前节点的值
左子树和右子树都是二叉搜索树
输入:root = [1,null,2,2]
输出:[2]
输入:root = [0]
输出:[0]
# 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]:
# 非递归
# results = []
# if not root.left and not root.right:return [root.val]
# from collections import deque
# que = deque([root])
# while que:
# n = len(que)
# for _ in range(n):
# node = que.popleft()
# if node.left:
# que.append(node.left)
# if node.right:
# que.append(node.right)
# results.append(node.val)
# from collections import defaultdict
# res = defaultdict(int)
# for i in results:res[i] += 1
# result = []
# for key,value in res.items():
# if(value == max(res.values())):
# result.append(key)
# return result
# 递归
res = []
def helper(root, depth):
res.append(root.val)
if root.left:
helper(root.left,depth+1)
if root.right:
helper(root.right, depth+1)
helper(root, 0)
from collections import defaultdict
result = defaultdict(int)
results = []
for i in res:result[i] += 1
for key, value in result.items():
if (value == max(result.values())):
results.append(key)
return results