您的位置:首页 > 编程语言 > C语言/C++

leetcode_c++:图:Minimum Height Trees(310)

2016-08-28 15:14 435 查看
class Solution {
public:
vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) {
//corner case
if ( n <= 1 ) return {0};

//construct a edges search data stucture
vector<unordered_set<int>> graph(n);
for (auto e : edges) {
graph[e.first].insert(e.second);
graph[e.second].insert(e.first);
}

//find all of leaf nodes
vector<int> current;
for (int i=0; i<graph.size(); i++){
if (graph[i].size() == 1)  current.push_back(i);
}

// BFS the graph
while (true) {
vector<int> next;
for (int node : current) {
for (int neighbor : graph[node]) {
graph[neighbor].erase(node);
if (graph[neighbor].size() == 1) next.push_back(neighbor);
}
}
if (next.empty()) break;
current = next;
}
return current;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: