解題思路
照著網路上其他人「一層層剝開 leaf node」的思維去寫。
有空再寫一次。
程式碼
class Solution {
public:
vector<int> findMinHeightTrees(int n, vector<vector<int>>& edges) {
if(n == 1) return vector<int>(1, 0);
vector<set<int>> graph(n);
for(int i=0; i<edges.size(); i++)
{
graph[edges[i][0]].insert(edges[i][1]);
graph[edges[i][1]].insert(edges[i][0]);
}
vector<int> leafNode, nextLeafNode;
for(int i=0; i<n; i++)
{
if(graph[i].size() == 1)
leafNode.push_back(i);
}
while(!leafNode.empty())
{
for(auto node : leafNode)
{
for(auto connect : graph[node])
{
graph[connect].erase(node);
if(graph[connect].size() == 1)
nextLeafNode.push_back(connect);
}
}
if(nextLeafNode.empty()) break;
swap(leafNode, nextLeafNode);
nextLeafNode.clear();
}
return leafNode;
}
};
沒有留言:
張貼留言