11
11
12
12
13
13
/**
14
- Given a binary search tree with duplicates. You have to find all the mode(s) in given binary tree.
14
+ * 501. Find Mode in Binary Search Tree
15
+ * Given a binary search tree with duplicates. You have to find all the mode(s) in given binary tree.
15
16
16
17
For example:
17
18
Given binary tree [1,null,2,2],
18
- 1
19
- \
19
+ 1
20
+ \
20
21
2
21
22
/
22
23
2
@@ -27,50 +28,83 @@ Given a binary search tree with duplicates. You have to find all the mode(s) in
27
28
*/
28
29
public class _501 {
29
30
30
- public int [] findMode (TreeNode root ) {
31
- int [] result = new int []{};
32
- Map <Integer , Integer > map = new HashMap ();
33
- if (root == null ) {
31
+ public static class Solution1 {
32
+ public int [] findMode (TreeNode root ) {
33
+ int [] result = new int []{};
34
+ Map <Integer , Integer > map = new HashMap ();
35
+ if (root == null ) {
36
+ return result ;
37
+ }
38
+ List <Integer > list = bfs (root , map );
39
+ result = new int [list .size ()];
40
+ for (int i = 0 ; i < list .size (); i ++) {
41
+ result [i ] = list .get (i );
42
+ }
34
43
return result ;
35
44
}
36
- List <Integer > list = bfs (root , map );
37
- result = new int [list .size ()];
38
- for (int i = 0 ; i < list .size (); i ++) {
39
- result [i ] = list .get (i );
40
- }
41
- return result ;
42
- }
43
45
44
- private List <Integer > bfs (TreeNode root , Map <Integer , Integer > map ) {
45
- Queue <TreeNode > queue = new LinkedList <>();
46
- queue .offer (root );
47
- while (!queue .isEmpty ()) {
48
- int size = queue .size ();
49
- for (int i = 0 ; i < size ; i ++) {
50
- TreeNode treeNode = queue .poll ();
51
- if (treeNode .left != null ) {
52
- queue .offer (treeNode .left );
46
+ private List <Integer > bfs (TreeNode root , Map <Integer , Integer > map ) {
47
+ Queue <TreeNode > queue = new LinkedList <>();
48
+ queue .offer (root );
49
+ while (!queue .isEmpty ()) {
50
+ int size = queue .size ();
51
+ for (int i = 0 ; i < size ; i ++) {
52
+ TreeNode treeNode = queue .poll ();
53
+ if (treeNode .left != null ) {
54
+ queue .offer (treeNode .left );
55
+ }
56
+ if (treeNode .right != null ) {
57
+ queue .offer (treeNode .right );
58
+ }
59
+ map .put (treeNode .val , map .getOrDefault (treeNode .val , 0 ) + 1 );
53
60
}
54
- if (treeNode .right != null ) {
55
- queue .offer (treeNode .right );
61
+ }
62
+
63
+ int highestFrequency = 0 ;
64
+ List <Integer > list = new ArrayList <>();
65
+ for (Map .Entry <Integer , Integer > entry : map .entrySet ()) {
66
+ if (entry .getValue () > highestFrequency ) {
67
+ highestFrequency = entry .getValue ();
68
+ list .clear ();
69
+ list .add (entry .getKey ());
70
+ } else if (entry .getValue () == highestFrequency ) {
71
+ list .add (entry .getKey ());
56
72
}
57
- map .put (treeNode .val , map .getOrDefault (treeNode .val , 0 ) + 1 );
58
73
}
74
+
75
+ return list ;
59
76
}
77
+ }
60
78
61
- int highestFrequency = 0 ;
62
- List <Integer > list = new ArrayList <>();
63
- for (Map .Entry <Integer , Integer > entry : map .entrySet ()) {
64
- if (entry .getValue () > highestFrequency ) {
65
- highestFrequency = entry .getValue ();
66
- list .clear ();
67
- list .add (entry .getKey ());
68
- } else if (entry .getValue () == highestFrequency ) {
69
- list .add (entry .getKey ());
79
+ public static class Solution2 {
80
+ public int [] findMode (TreeNode root ) {
81
+ Map <Integer , Integer > map = new HashMap <>();
82
+ dfs (root , map );
83
+ int modeCount = 0 ;
84
+ for (int key : map .keySet ()) {
85
+ modeCount = Math .max (modeCount , map .get (key ));
86
+ }
87
+ List <Integer > mode = new ArrayList <>();
88
+ for (int key : map .keySet ()) {
89
+ if (map .get (key ) == modeCount ) {
90
+ mode .add (key );
91
+ }
92
+ }
93
+ int [] result = new int [mode .size ()];
94
+ for (int i = 0 ; i < mode .size (); i ++) {
95
+ result [i ] = mode .get (i );
70
96
}
97
+ return result ;
71
98
}
72
99
73
- return list ;
100
+ private void dfs (TreeNode root , Map <Integer , Integer > map ) {
101
+ if (root == null ) {
102
+ return ;
103
+ }
104
+ dfs (root .left , map );
105
+ map .put (root .val , map .getOrDefault (root .val , 0 ) + 1 );
106
+ dfs (root .right , map );
107
+ }
74
108
}
75
109
76
110
}
0 commit comments