本文主要是介绍leetcode + minimum height tree+拨洋葱法,最后结果要么是一个或者两个,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击打开链接
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;}
};
这篇关于leetcode + minimum height tree+拨洋葱法,最后结果要么是一个或者两个的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!