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;
    }
};

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐