?501. 二叉搜索树中的众数(Python)

题目

难度:★★★☆☆
类型:二叉树

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

假定 BST 有如下定义:

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

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

   1
    \
     2
    /
   2

返回[2].

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

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

解答

这题笔者不会。。等先刷完简单题再过来看。

class Solution:
    def findMode(self, root):
        if root is None:
            return []
        dict_tree = {root.val:1}
        stack = [root]
        while stack:
            node = stack.pop()
            if node.left:
                if node.left.val in dict_tree:
                    dict_tree[node.left.val] += 1
                else:
                    dict_tree[node.left.val] = 1
                stack.append(node.left)
            if node.right:
                if node.right.val in dict_tree:
                    dict_tree[node.right.val] += 1
                else:
                    dict_tree[node.right.val] = 1
                stack.append(node.right)

        maxnum = sorted(dict_tree.values())[-1]
        return [i for i in dict_tree if dict_tree[i] == maxnum]

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(?501. 二叉搜索树中的众数(Python))