310. 最小高度树

 1 class Solution 
 2 {
 3 public:
 4     vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) 
 5     {
 6         vector<int> ans;
 7         if(n == 1) return {0};
 8         vector<int> degree(n);
 9         unordered_map<int,vector<int>> hash;
10         for(auto edge : edges)
11         {
12             degree[edge[0]] ++;degree[edge[1]] ++;
13             hash[edge[0]].push_back(edge[1]);
14             hash[edge[1]].push_back(edge[0]);
15         }
16 
17         queue<int> q;
18 
19         for(int i = 0;i < n;i ++)
20         {
21             if(degree[i] == 1) q.push(i);
22         }
23 
24         while (!q.empty())
25         {
26             int size = q.size();
27             vector<int> temp;
28             for (int i=0;i<size;i++)
29             {
30                 int cur = q.front();q.pop();
31                 temp.push_back(cur);
32                 for (auto next : hash[cur])
33                 {
34                     degree[next]--;//删除叶子节点后,跟其相邻的节点的度数要减少
35                     if (degree[next] == 1) q.push(next);
36                 }
37             }
38             ans = temp;
39         }
40         return ans;
41     }
42 };

 

posted @ 2020-04-20 22:34  Jinxiaobo0509  阅读(143)  评论(0)    收藏  举报