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

    M1: using extra space

    traverse的时候,用hashmap存每个节点出现的次数

    time: O(n), space: O(n)

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        int max = 0;
        
        public int[] findMode(TreeNode root) {
            if(root == null) {
                return new int[] {};
            }
            Map<Integer, Integer> map = new HashMap<>();
            traverse(root, map);
            
            List<Integer> tmp = new ArrayList<>();
            for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
                if(entry.getValue() == max) {
                    tmp.add(entry.getKey());
                }
            }
            
            int[] res = new int[tmp.size()];
            for(int i = 0; i < tmp.size(); i++) {
                res[i] = tmp.get(i);
            }
            return res;
        }
        
        public void traverse(TreeNode root, Map<Integer, Integer> map) {
            if(root == null) {
                return;
            }
            map.put(root.val, map.getOrDefault(root.val, 0) + 1);
            max = Math.max(max, map.get(root.val));
            traverse(root.left, map);
            traverse(root.right, map);
        }
    }

    M2: optimized, not using extra space

  • 相关阅读:
    GridView的TemplateField
    数据源绑定
    hihocoder-1415 后缀数组三·重复旋律3 两个字符串的最长公共子串
    hihocoder-1407 后缀数组二·重复旋律2 不重合 最少重复K次
    hdu number number number 斐波那契数列 思维
    最长上升子序列 nlogn
    hdu-4507 吉哥系列故事——恨7不成妻 数位DP 状态转移分析/极限取模
    hdu-3652 B-number 数位DP
    hdu-2089 不要62 基础DP 模板
    字符串hash
  • 原文地址:https://www.cnblogs.com/fatttcat/p/10200168.html
Copyright © 2020-2023  润新知