【LeetCode 简单题】117-二叉搜索树中的众数

声明:

今天是第117道题。给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 大的元素。如果不存在,对应位置输出-1。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

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

假定 BST 有如下定义:

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

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

   1
    \
     2
    /
   2

返回[2].

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

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

解法1。常规思路,遍历整个二叉树,把元素及其出现频数放到字典里,结束后遍历该字典找出频数最大对应的键并返回,代码如下。

执行用时: 88 ms, 在Find Mode in Binary Search Tree的Python3提交中击败了78.53% 的用户

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution():
    max_count = 0
    def FindMode(self,root):
        res = []
        res_map = {}
        if not root:
            return []
        self.dfs(root,res_map)
        for key,value in res_map.items():
            if value == self.max_count:
                res.append(key)
        return res
    
    def dfs(self,root,res_map):
        if not root:
            return
        # 中序遍历,左-根-右
        self.dfs(root.left,res_map)
        res_map[root.val] = res_map.get(root.val,0)+1
        self.max_count = max(self.max_count,res_map[root.val])
        self.dfs(root.right,res_map)

结尾

解法1:https://unclegem.cn/2018/08/26/Leetcode%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0-501-%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E4%BC%97%E6%95%B0/

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/84441661
今日推荐