点击打开链接
class Solution {
public:
vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) {
if(n==1) return {0};
vector<int> res;
vector<unordered_set<int>> adj(n);
queue<int> Q;
for(int i=0; i<edges.size();i++){
adj[edges[i].first].insert(edges[i].second);
adj[edges[i].second].insert(edges[i].first);
}
for(int i=0; i<n; i++){ //叶子节点
if(adj[i].size()==1) Q.push(i);
}
while (n>2) {
int size = Q.size();
n -= size;
for(int i=0; i<size; i++){
int t = Q.front(); Q.pop();
for(auto a: adj[t]){
adj[a].erase(t);
if(adj[a].size()==1) Q.push(a);
}
}
}
while (!Q.empty()) {
res.push_back(Q.front()); Q.pop();
}
return res;
}
};
