[leetcode: Python]501. Find Mode in Binary Search Tree

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.

Assume a BST is defined as follows:

The left subtree of a node contains only nodes with keys less than or equal to the node’s key.
The right subtree of a node contains only nodes with keys greater than or equal to the node’s key.
Both the left and right subtrees must also be binary search trees.
For example:
Given BST [1,null,2,2],

   1
    \
     2
    /
   2

return [2].

Note: If a tree has more than one mode, you can return them in any order.

Follow up: Could you do that without using any extra space? (Assume that the implicit stack space incurred due to recursion does not count).

方法一:129ms

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def findMode(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        counter = collections.Counter()
        def traverse(root):
            if not root:
                return 
            counter[root.val] += 1
            traverse(root.left)
            traverse(root.right)
        traverse(root)
        maxn = max(counter.values()+[None])
        return [e for e, v in counter.iteritems() if v == maxn]

方法二:96ms

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def findMode(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        count = collections.defaultdict(int)
        def preorder(root):
            if root:
                
                count[root.val] += 1
                preorder(root.left)
                preorder(root.right)
        preorder(root)
        max_occ = max(count.values())
        return [k for k in count if count[k] == max_occ]

[leetcode: Python]501. Find Mode in Binary Search Tree_第1张图片

你可能感兴趣的:(LeetCode:,Easy)