码迷,mamicode.com
首页 > 其他好文 > 详细

Minimum Height Trees

时间:2016-07-06 09:52:51      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

 1 public class Solution {
 2     public List<Integer> findMinHeightTrees(int n, int[][] edges) {
 3         if (n == 1) {
 4             return Collections.singletonList(0);
 5         }
 6         Map<Integer, Set<Integer>> nodes = new HashMap<>();
 7         for (int i = 0; i < n; i++) {
 8             nodes.put(i, new HashSet<>());
 9         }
10         for (int[] edge : edges) {
11             nodes.get(edge[0]).add(edge[1]);
12             nodes.get(edge[1]).add(edge[0]);
13         }
14         
15         List<Integer> leaves = new ArrayList<>();
16         for (Integer i : nodes.keySet()) {
17             if (nodes.get(i).size() == 1) {
18                 leaves.add(i);
19             }
20         }
21         
22         while (n > 2) {
23             n -= leaves.size();
24             List<Integer> newLeaves = new ArrayList<>();
25             for (int leave : leaves) {
26                 int current = nodes.get(leave).iterator().next();
27                 nodes.get(current).remove(leave);
28                 if (nodes.get(current).size() == 1) {
29                     newLeaves.add(current);
30                 }
31             }
32             leaves = newLeaves;
33         }
34         return leaves;
35     }
36 }

1. Check boundary case that when n == 1. There is only one node (0)

2. Set can access by iterator.

Minimum Height Trees

标签:

原文地址:http://www.cnblogs.com/shuashuashua/p/5645592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!