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

    给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。

    假定 BST 有如下定义:

    结点左子树中所含结点的值小于等于当前结点的值
    结点右子树中所含结点的值大于等于当前结点的值
    左子树和右子树都是二叉搜索树
    例如:
    给定 BST [1,null,2,2],

    1

    2
    /
    2
    返回[2].

    提示:如果众数超过1个,不需考虑输出顺序

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/find-mode-in-binary-search-tree

     1 import java.util.ArrayList;
     2 import java.util.Arrays;
     3 import java.util.List;
     4 
     5 public class FindModeInBST501 {
     6     static class TreeNode {
     7         int val;
     8         TreeNode left;
     9         TreeNode right;
    10         TreeNode(int x) {
    11             this.val = x;
    12         }
    13     }
    14     
    15     private TreeNode cur;
    16     private int count = 1;
    17     private int result = 1;
    18     
    19     public int[] findMode(TreeNode root) {
    20         List<Integer> maxCounts = new ArrayList<>();
    21         inOrder(root, maxCounts);
    22         int[] res = new int[maxCounts.size()];
    23         for(int i = 0 ; i < maxCounts.size(); i++) {
    24             res[i] = maxCounts.get(i);
    25         }
    26         return res;      
    27     }
    28     public void inOrder(TreeNode root, List<Integer> list) {
    29         if(root == null) {
    30             return;
    31         }
    32         inOrder(root.left, list);
    33         if(cur != null) {
    34             if(root.val == cur.val) {
    35                 count++;
    36                 if(result == count) {
    37                     list.add(root.val);
    38                 }
    39                 if(result < count) {
    40                     result = count;
    41                     list.clear();
    42                     list.add(root.val);
    43                 }
    44             }else {
    45                 count = 1;
    46                 cur = root;
    47                 if(count == result) {
    48                     list.add(root.val);
    49                 }
    50             }
    51         }else {
    52             cur = root;
    53             list.add(root.val);
    54         }
    55         inOrder(root.right, list);
    56     }
    57     
    58     public static void main(String[] args) {
    59         FindModeInBST501 t = new FindModeInBST501();
    60         TreeNode root = new TreeNode(1);
    61         root.right = new TreeNode(2);
    62         root.right.left = new TreeNode(2);
    63         System.out.println(Arrays.toString(t.findMode(root)));
    64     }
    65 }
    无论有多困难,都坚强的抬头挺胸,人生是一场醒悟,不要昨天,不要明天,只要今天。不一样的你我,不一样的心态,不一样的人生,顺其自然吧
  • 相关阅读:
    tomcat常见错误
    tomcat——大致简介和执行过程
    JSON的基本操作
    VS Code 终端显示问题
    VS Code在本地进行调试和打开本地服务器
    重做了一下我的音乐播放器
    Treimu更新记录1.2.9.0
    Android开发中Eclipse里的智能提示设置
    一次面试经历
    正确处理WPF中Slider值改变事件的方式
  • 原文地址:https://www.cnblogs.com/xiyangchen/p/11173532.html
Copyright © 2011-2022 走看看