美文网首页
Minimum Height Trees

Minimum Height Trees

作者: Frank_Kivi | 来源:发表于2018-06-28 14:06 被阅读5次

    https://www.lintcode.com/problem/minimum-height-trees/description

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    
    public class Solution {
        /**
         * @param n: n nodes labeled from 0 to n - 1
         * @param edges: a undirected graph
         * @return: a list of all the MHTs root labels
         */
        public List<Integer> findMinHeightTrees(int n, int[][] edges) {
            // Wirte your code here
    //        叶子节点肯定比中间节点的高
            if (n == 1) return Collections.singletonList(0);
            List<Integer> leaves = new ArrayList<>();
            List<Set<Integer>> adj = new ArrayList<>(n);
            for (int i = 0; i < n; ++i) adj.add(new HashSet<>());
            for (int[] edge : edges) {
                adj.get(edge[0]).add(edge[1]);
                adj.get(edge[1]).add(edge[0]);
            }
            for (int i = 0; i < n; ++i) {
                if (adj.get(i).size() == 1) leaves.add(i);
            }
            while (n > 2) {
                n -= leaves.size();
                List<Integer> newLeaves = new ArrayList<>();
                for (int i : leaves) {
                    int t = adj.get(i).iterator().next();
                    adj.get(t).remove(i);
                    if (adj.get(t).size() == 1) newLeaves.add(t);
                }
                leaves = newLeaves;
            }
            return leaves;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Minimum Height Trees

          本文链接:https://www.haomeiwen.com/subject/pmugyftx.html