美文网首页
Leetcode 501. Find Mode in Binar

Leetcode 501. Find Mode in Binar

作者: njim3 | 来源:发表于2019-06-13 11:16 被阅读0次

    题目

    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).

    解析

    此题是求BST(二叉搜索树)中出现次数最多的值,如果出现多个,都返回结果,顺序不做限定。
    作者在使用C语言解决此题时,在IDE中运行无误,提交至leetcode后一直报runtime error,但又从中发现不到什么错误。所以就使用python编写此题。
    其思路都是一致的,首先使用DFS将所有的元素出现的次数统计一下,放入dict中。然后再遍历此dict,找到其出现的次数,将出现次数最多的放入返回的array中。

    代码(Python)

    from collections import defaultdict
    
    
    # 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]
            """
            counts = defaultdict(int)
            stack = []
            curr = root
    
            # DFS
            while True:
                while curr:
                    stack.append(curr)
                    counts[curr.val] += 1
                    curr = curr.left
    
                if len(stack) == 0:
                    break
    
                curr = stack.pop()
                curr = curr.right
    
            # Find all modes
            mode = -1
            curr_modes = []
            for c in counts:
                if counts[c] == mode:
                    curr_modes.append(c)
                if counts[c] > mode:
                    mode = counts[c]
                    curr_modes = [c]
    
            return curr_modes
    

    defaultdict是默认的dict,如果访问的元素没有则返回空而不会报错。提交时将该包导入。

    相关文章

      网友评论

          本文标题:Leetcode 501. Find Mode in Binar

          本文链接:https://www.haomeiwen.com/subject/xjujfctx.html