package problems.medium;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Created by sherxon on 1/25/17.
*/
public class MinimumHeightTrees {
public static void main(String[] args) {
findMinHeightTrees(4,
new int[][]{{1, 0}, {1, 2}, {1, 3}});
}
static List<Integer> findMinHeightTrees(int n, int[][] edges) {
List<Integer> list = new ArrayList<>();
if (n == 0) return list;
if (n == 1) {
list.add(0);
return list;
}
List<Set<Integer>> sets = new ArrayList<>();
for (int i = 0; i < n; i++)
sets.add(new HashSet<>());
for (int[] edge : edges) {
sets.get(edge[0]).add(edge[1]);
sets.get(edge[1]).add(edge[0]);
}
List<Integer> leaves = new ArrayList<>();
for (int i = 0; i < sets.size(); i++)
if (sets.get(i).size() == 1) leaves.add(i);
while (n > 2) {
n -= leaves.size();
List<Integer> newl = new ArrayList<>();
for (Integer leaf : leaves) {
int i = sets.get(leaf).iterator().next();
sets.get(i).remove(leaf);
if (sets.get(i).size() == 1) newl.add(i);
}
leaves = newl;
}
return leaves;
}
}