最小高度树(c++实现)
【代码】最小高度树(c++实现)
·
class Solution {
const static int N = 2e4+10;
int d[N];
int hh=0,tt=-1;
int q[N*2];
public:
vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) {
vector<int> res;
if(n==1){
res.push_back(0);
return res;
}
vector<vector<int>> v(n);
for(auto eds : edges){
v[eds[0]].push_back(eds[1]);
v[eds[1]].push_back(eds[0]);
d[eds[0]]++;
d[eds[1]]++;
}
int num = n;
for(int i=0;i<n;i++){
if(d[i]==1) q[++tt] = i;
}
while(num>2){
num -= (tt-hh+1);
int out = tt-hh+1;
for(int i=out;i>0;i--){
int j = q[hh++];
for(int nethor : v[j]){
if(--d[nethor]==1) q[++tt] = nethor;
}
}
}
while(hh<=tt){
res.push_back(q[hh++]);
}
return res;
}
};
更多推荐
已为社区贡献20条内容
所有评论(0)