@@ -4,33 +4,36 @@ public List<Integer> findMinHeightTrees(int n, int[][] edges) {
4
4
return Arrays .asList (0 );
5
5
}
6
6
7
- List <Set <Integer >> adjList = new ArrayList <>();
8
- List <Integer > leaves = new ArrayList <>();
9
-
10
- for (int i = 0 ; i < n ; i ++) {
11
- adjList .add (new HashSet <>());
12
- }
7
+ Map <Integer , Set <Integer >> graph = new HashMap <>();
13
8
14
9
for (int [] edge : edges ) {
15
- adjList .get (edge [0 ]).add (edge [1 ]);
16
- adjList .get (edge [1 ]).add (edge [0 ]);
10
+ graph .putIfAbsent (edge [0 ], new HashSet <>());
11
+ graph .putIfAbsent (edge [1 ], new HashSet <>());
12
+
13
+ graph .get (edge [0 ]).add (edge [1 ]);
14
+ graph .get (edge [1 ]).add (edge [0 ]);
17
15
}
18
16
19
- for (int i = 0 ; i < n ; i ++) {
20
- if (adjList .get (i ).size () == 1 ) {
21
- leaves .add (i );
17
+ List <Integer > leaves = new ArrayList <>();
18
+
19
+ for (int leaf : graph .keySet ()) {
20
+ if (graph .get (leaf ).size () == 1 ) {
21
+ leaves .add (leaf );
22
22
}
23
23
}
24
24
25
- while (n > 2 ) {
26
- n -= leaves .size ();
25
+ int remainingNodes = n ;
26
+
27
+ while (remainingNodes > 2 ) {
28
+ remainingNodes -= leaves .size ();
27
29
List <Integer > newLeaves = new ArrayList <>();
28
30
29
- for (int currLeaf : leaves ) {
30
- int adjLeaf = adjList .get (currLeaf ).iterator ().next ();
31
- adjList .get (adjLeaf ).remove (currLeaf );
32
- if (adjList .get (adjLeaf ).size () == 1 ) {
33
- newLeaves .add (adjLeaf );
31
+ for (int leaf : leaves ) {
32
+ int neighbour = graph .get (leaf ).iterator ().next ();
33
+ graph .get (neighbour ).remove (leaf );
34
+
35
+ if (graph .get (neighbour ).size () == 1 ) {
36
+ newLeaves .add (neighbour );
34
37
}
35
38
}
36
39
0 commit comments