LeetCode 501. 二叉搜索树中的众数

501. 二叉搜索树中的众数

Difficulty: 简单

给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。

假定 BST 有如下定义:

  • 结点左子树中所含结点的值小于等于当前结点的值
  • 结点右子树中所含结点的值大于等于当前结点的值
  • 左子树和右子树都是二叉搜索树

例如:
给定 BST [1,null,2,2],

   1
    \
     2
    /
   2

返回[2].

提示:如果众数超过1个,不需考虑输出顺序

进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)

Solution

Language: ****
思路一:迭代,DFS或BFS都可以,需要额外的空间。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
​
class Solution:
    def findMode(self, root: TreeNode) -> List[int]:
        if not root:
            return None
        stack, d, res = [], {}, []
        while True:
            while root:
                stack.append(root)
                root = root.left
            if not stack:
                break
            node = stack.pop()
            d[node.val] = d.get(node.val,0) + 1
            root = node.right
        max_values = max(d.values())
        for k,v in d.items():
            if v == max_values:
                res.append(k)
        return res
posted @ 2020-12-07 10:39  swordspoet  阅读(58)  评论(0编辑  收藏  举报