(M)BFS:310. Minimum Height Trees

来源:互联网 发布:mac 怎么创建xlsx文档 编辑:程序博客网 时间:2024/06/03 18:10

求给定图中,能形成树的最矮的树。

BFS,利用无向图每个点的degree来计算。先计算每个点的degree,然后将degree为1的点放入list或者queue中进行计算,把这些点从邻接表中去除,然后计算接下来degree = 1的点。最后剩下1 - 2个点就是新的root。

class Solution {public:    vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) {        vector<unordered_set<int>> graph(n);        for(auto a : edges)        {            graph[a.second].insert(a.first);            graph[a.first].insert(a.second);        }        vector<int> temp;        if (n == 1) {            temp.push_back(0);            return temp;        }        for(int i = 0; i < n; ++i){            if(graph[i].size() == 1)                    temp.push_back(i);        }        while(true)        {            vector<int> next;            for(auto a : temp){                for(auto neighbor : graph[a])                {                    graph[neighbor].erase(a);                    if(graph[neighbor].size() == 1)                         next.push_back(neighbor);                }            }            if(next.size() == 0)                return temp;            else                temp = next;        }    }};