501. Find Mode in Binary Search Tree

Given a binary search tree (BST) with duplicates, find all the mode) (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).

Solution:

class Solution(object):
    def findMode(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        mode = []
        stats = [None, 0, 0]

        def find(node):
            if not node:
                return
            find(node.left)
            update(node.val)
            find(node.right)

        def update(val):
            pre, freq, max_freq = stats
            if val == pre:
                freq += 1
            else:
                freq = 1
                pre = val
            if freq == max_freq:
                mode.append(val)
            elif freq > max_freq:
                max_freq = freq
                mode[:] = [val]
            stats[:] = [pre, freq, max_freq]

        find(root)
        return mode

results matching ""

    No results matching ""