1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
import java.util.*;
public class {
public List<Integer> findMinHeightTrees(int n, int[][] edges) {
if (n == 1) { return Arrays.asList(0); }
HashMap<Integer, LinkedList<Integer>> adj = new HashMap<>(); int[] indegree = new int[n]; for (int i=0; i<n; i++) adj.put(i, new LinkedList<>()); for (int[] e: edges){ adj.get(e[0]).add(e[1]); adj.get(e[1]).add(e[0]); indegree[e[1]] ++; indegree[e[0]] ++; }
ArrayList<Integer> leaves = new ArrayList<>();
for (int i=0; i<n; i++){ if (indegree[i] == 1){ leaves.add(i); } }
while(n>2){ ArrayList<Integer> nextLeave = new ArrayList<>(); for (int leave: leaves){ for (int node: adj.get(leave)){ if (--indegree[node] == 0) nextLeave.add(node); } } n -= leaves.size(); leaves = nextLeave; } return leaves; } }
|
近期评论