赞
踩
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
假定 BST 有如下定义:
结点左子树中所含结点的值小于等于当前结点的值
结点右子树中所含结点的值大于等于当前结点的值
左子树和右子树都是二叉搜索树
例如:
给定 BST [1,null,2,2],
1
\
2
/
2
返回[2].
提示:如果众数超过1个,不需考虑输出顺序
进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)
#最直观的思路
# 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: TreeNode) -> List[int]: res = [] pre = float('-inf') count = 0 max_count = 0 # def mid(root): # nonlocal res, pre, count, max_count # if not root: # return # mid(root.left) # if root.val == pre: # count += 1 # else: # count = 1 # if count == max_count: # res.append(root.val) # elif count > max_count: # res = [root.val] # max_count = max(max_count, count) # pre = root.val # mid(root.right) # mid(root) # return res stack = [] while stack or root: while root: stack.append(root) root = root.left root = stack.pop() if root.val == pre: count += 1 else: count = 1 if count == max_count: res.append(root.val) elif count > max_count: res = [root.val] max_count = max(count, max_count) pre = root.val root = root.right return res
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。