[LeetCode]310. Minimum Height Trees

来源:互联网 发布:淘宝新开网店如何推广 编辑:程序博客网 时间:2024/04/30 12:26

https://leetcode.com/problems/minimum-height-trees/?tab=Description

找到图转为数值后的最低深度时的根节点



根节点一定是图的最长路径的中间节点


不停删除最外层的叶子节点,直到剩下节点小于等于两个就是所求



public class Solution {    public List<Integer> findMinHeightTrees(int n, int[][] edges) {        if (n == 1) {            return Collections.singletonList(0);        }        List<HashSet<Integer>> all = new ArrayList(n);        for (int i = 0; i < n; i++) {            all.add(new HashSet<Integer>());        }        for (int[] edge : edges) {            int i1 = edge[0];            int i2 = edge[1];            all.get(i1).add(i2);            all.get(i2).add(i1);        }        List<Integer> leaves = new ArrayList();        for (int i = 0; i < all.size(); i++) {            if (all.get(i).size() == 1) {                leaves.add(i);            }        }        while (n > 2) {            n -= leaves.size();            List<Integer> newLeaves = new ArrayList();            for (int i = 0; i < leaves.size(); i++) {                int j = all.get(leaves.get(i)).iterator().next();                all.get(j).remove(leaves.get(i));                if (all.get(j).size() == 1) {                    newLeaves.add(j);                }            }            leaves = newLeaves;        }        return leaves;    }}


0 0
原创粉丝点击