zoukankan      html  css  js  c++  java
  • Leetcode二叉树 501. 二叉搜索树中的众数

    遍历

    
    package binarytree.findMode;
    
    import binarytree.untils.GenerateTreeNode;
    import binarytree.untils.TreeNode;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 501. 二叉搜索树中的众数
     * 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。
     *
     * 假定 BST 有如下定义:
     *
     * 结点左子树中所含结点的值小于等于当前结点的值
     * 结点右子树中所含结点的值大于等于当前结点的值
     * 左子树和右子树都是二叉搜索树
     * 例如:
     * 给定 BST [1,null,2,2],
     *
     *    1
     *     \
     *      2
     *     /
     *    2
     * 返回[2].
     *
     * 提示:如果众数超过1个,不需考虑输出顺序
     */
    public class findMode {
        /**
         * 搜索遍历
         * @param root
         * @return
         */
        public static int[] findMode(TreeNode root) {
            Map<Integer,Integer> map = new HashMap<>();
            inOrder(root,map);
            int max = 0;
            for (Map.Entry<Integer,Integer> m: map.entrySet()) {
                max=Math.max(max,m.getValue());
            }
    
           List<Integer> res1 = new ArrayList<>();
            int i = 0;
            for (Map.Entry<Integer,Integer> m: map.entrySet()) {
              if(m.getValue()==max){
                  res1.add(m.getKey());
              }
            }
    
           int[] res = new int[res1.size()];
            for (int j = 0; j < res1.size(); j++) {
                res[j] = res1.get(j);
            }
    
    
            return res;
        }
        
        private static void inOrder(TreeNode root,Map<Integer,Integer> map){
          if(root == null){
              return;
          }
            if(map.containsKey(root.val)){
                int count = map.get(root.val);
                map.put(root.val,++count);
            }
            else{
                map.put(root.val,1);
            }
            inOrder(root.left,map);
            inOrder(root.right,map);
        }
    
        public static void main(String[] args) {
            Integer[] nums = {1,null,2};
            TreeNode treeNode = GenerateTreeNode.generateTreeNode(nums);
            int[] mode = findMode(treeNode);
            for (int i = 0; i < mode.length; i++) {
                System.out.println(mode[i]);
            }
        }
    }
    
    
  • 相关阅读:
    beta冲刺——用户使用调查报告
    专业团队——Beta计划总结随笔
    专业团队测试随笔
    Beta冲刺--第十次随笔
    Beta冲刺--第九次随笔(md文档问题的解决)
    Beta冲刺--第八次随笔
    Beta冲刺--第七次随笔(仓库优化)
    Beta冲刺--第六次随笔(仓库修改)
    Beta冲刺--第五次随笔
    Beta冲刺--第四次随笔
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/15701145.html
Copyright © 2011-2022 走看看