Minimum Height Trees LeetCode solution in C++
1class Solution {2public:3int getheight(vector<int> a[], int sv, int n) {4int lvl = 0;5vector<int> vis(n, 0);6queue<int> q;7q.push(sv);8vis[sv] = 0;9while (q.size()) {10int sz = q.size();11lvl++;12while (sz--) {13int curr = q.front();14q.pop();15vis[curr] = 1;1617for (auto it : a[curr]) {18if (vis[it] == 0) {19q.push(it);20}21}22}23}24return lvl;25}26vector<int> findMinHeightTrees(int n, vector<vector<int>> &edges) {27vector<int> a[n];28vector<int> indegree(n, 0);29for (auto it : edges) {30a[it[0]].push_back(it[1]);31a[it[1]].push_back(it[0]);32indegree[it[0]]++;33indegree[it[1]]++;34}3536// cutting leafs whose indegree is 137queue<int> q;38vector<int> ans;39for (int i = 0; i < n; i++) {40if (indegree[i] == 1) {41q.push(i);42indegree[i]--;43}44}4546while (q.size()) {47int sz = q.size();48ans.clear();49while (sz--) {50int curr = q.front();51q.pop();52ans.push_back(curr);53for (auto it : a[curr]) {54indegree[it]--;55if (indegree[it] == 1) q.push(it);56}57}58}5960if (n == 1) return {0};6162return ans;6364// brute force gives tle65// int mn = INT_MAX;66// unordered_map<int,vector<int>> mp;67// for(int i = 0;i<n;i++)68// {69// int x = getheight(a,i,n);70// mp[x].push_back(i);7172// // cout<<i<<" "<<x<<endl;7374// mn = min(mn,x);75// }7677// return mp[mn];78}79};