310 Minimum Height Trees

class Solution {
    public List<Integer> findMinHeightTrees(int n, int[][] edges) {
        Map<Integer, Set<Integer>> hash = new HashMap<>();

        for (int i = 0; i < n; i++) hash.put(i, new HashSet<>());

        for (int[] edge : edges){
            hash.get(edge[0]).add(edge[1]);
            hash.get(edge[1]).add(edge[0]);
        }

        Queue<Integer> q = new LinkedList<>();

        for (int key : hash.keySet()){
            if (hash.get(key).size() == 1) q.offer(key);
        }

        while (n > 2){
            int size = q.size();

            for (int i = 0; i < size; i++){
                int cur = q.poll();
                n--;
                for (int nei : hash.get(cur)){
                    hash.get(nei).remove(cur);
                    if (hash.get(nei).size() == 1) q.offer(nei);
                }    
            }

        }

        List<Integer> ans = new ArrayList<>();
        if (q.isEmpty()) ans.add(0);
        while (!q.isEmpty()){
            ans.add(q.poll());
        }

        return ans;
    }
}

results matching ""

    No results matching ""