Minimum Height Trees LeetCode solution in Java

1
class Solution {
2
public List<Integer> findMinHeightTrees(int n, int[][] edges) {
3
if (edges.length == 0) {
4
List<Integer> al = new ArrayList<>();
5
al.add(0);
6
return al;
7
}
8
HashMap<Integer, Set<Integer>> map = new HashMap<>(); // map == graph
9
int[] degree = new int[n];
10
for (int[] edge : edges) {
11
int src = edge[0];
12
int dest = edge[1];
13
map.putIfAbsent(src, new HashSet<>());
14
map.get(src).add(dest);
15
map.putIfAbsent(dest, new HashSet<>());
16
map.get(dest).add(src);
17
degree[src]++;
18
degree[dest]++;
19
}
20
Queue<Integer> q = new ArrayDeque<>();
21
for (int i = 0; i < degree.length; i++) {
22
if (degree[i] == 1) {
23
q.offer(i);
24
}
25
}
26
int count = n;
27
while (count > 2) {
28
int size = q.size();
29
count -= size;
30
while (size-- > 0) {
31
Integer src = q.poll();
32

33
for (Integer connection : map.get(src)) {
34
degree[connection]--;
35
if (degree[connection] == 1) {
36
q.offer(connection);
37
}
38
}
39
}
40
}
41
return new ArrayList<>(q);
42
}
43
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0