最小高度的樹 Minimum Height Trees

來源:互聯網
上載者:User

標籤:bfs   lis   使用   好的   return   leave   div   圖片   list   

2018-09-24 12:01:38

問題描述:

問題求解:

毫無疑問的一條非常好的題目,採用的解法是逆向的BFS,也就是從葉子節點開始遍曆,逐步向中心靠攏,最終留下的葉子節點就是答案。

    public List<Integer> findMinHeightTrees(int n, int[][] edges) {        // tricks :使用Collections.singletonList(0)可以直接返回單個值的List        if (n == 1) return Collections.singletonList(0);        // tricks :使用Set是為了方便在之後維護graph的時候方便按值刪除        List<Set<Integer>> graph = new ArrayList<>(n);        for (int i = 0; i < n; i++) graph.add(new HashSet<>());        for (int[] edge : edges) {            graph.get(edge[0]).add(edge[1]);            graph.get(edge[1]).add(edge[0]);        }        List<Integer> leaves = new ArrayList<>();        for (int i = 0; i < n; i++) {            if (graph.get(i).size() == 1) leaves.add(i);        }        while (n > 2) {            n -= leaves.size();            List<Integer> newLeaves = new ArrayList<>();            for (int i : leaves) {                int j = graph.get(i).iterator().next();                graph.get(j).remove(i);                if (graph.get(j).size() == 1) newLeaves.add(j);            }            leaves = newLeaves;        }        return leaves;    }

 

最小高度的樹 Minimum Height Trees

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.