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 };
Mamba never out

浙公网安备 33010602011771号