[leetcode] 310. Minimum Height Trees
来源:互联网 发布:word2016破解知乎 编辑:程序博客网 时间:2024/04/30 08:10
For a undirected graph with tree characteristics, we can choose any node as the root. The result graph is then a rooted tree. Among all possible rooted trees, those with minimum height are called minimum height trees (MHTs). Given such a graph, write a function to find all the MHTs and return a list of their root labels.
Format
The graph contains n
nodes which are labeled from 0
to n - 1
. You will be given the number n
and a list of undirected edges
(each edge is a pair of labels).
You can assume that no duplicate edges will appear in edges
. Since all edges are undirected, [0, 1]
is the same as [1, 0]
and thus will not appear together in edges
.
Example 1:
Given n = 4
, edges = [[1, 0], [1, 2], [1, 3]]
0 | 1 / \ 2 3
return [1]
Example 2:
Given n = 6
, edges = [[0, 3], [1, 3], [2, 3], [4, 3], [5, 4]]
0 1 2 \ | / 3 | 4 | 5
return [3, 4]
Hint:
- How many MHTs can a graph have at most?
Note:
(1) According to the definition of tree on Wikipedia: “a tree is an undirected graph in which any two vertices are connected by exactly one path. In other words, any connected graph without simple cycles is a tree.”
(2) The height of a rooted tree is the number of edges on the longest downward path between the root and a leaf.
解法一:
很像topological sort的算法。
class Solution {public: vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) { if(n==1) return {0}; vector<int> in(n,0); vector<int> res; vector<vector<int>> graph(n,vector<int>()); for(auto a:edges){ graph[a.first].push_back(a.second); ++in[a.first]; graph[a.second].push_back(a.first); ++in[a.second]; } queue<int> q; for(int i=0; i<n; i++){ if(in[i]==1) q.push(i); } while(n>2){ int sz = q.size(); for(int i=0; i<sz; i++){ int cur = q.front(); q.pop(); --n; for(auto a:graph[cur]){ --in[a]; if(in[a]==1) q.push(a); } } } while(!q.empty()){ res.push_back(q.front()); q.pop(); } return res; } };
- Leetcode 310. Minimum Height Trees
- [leetcode] 310. Minimum Height Trees
- 310. Minimum Height Trees LeetCode
- leetcode 310. Minimum Height Trees
- LeetCode *** 310. Minimum Height Trees
- 【LeetCode】310. Minimum Height Trees
- [leetcode] 310.Minimum Height Trees
- leetcode-310. Minimum Height Trees
- [leetcode] 310. Minimum Height Trees
- 【LeetCode】310. Minimum Height Trees
- LeetCode 310. Minimum Height Trees
- Leetcode 310. Minimum Height Trees
- [LeetCode]310. Minimum Height Trees
- Leetcode: 310.Minimum Height Trees
- 【Leetcode】310. Minimum Height Trees
- LeetCode 310. Minimum Height Trees
- leetcode-310. Minimum Height Trees
- Leetcode 310. Minimum Height Trees
- 懒虫小鑫
- Jenkins进阶系列之——05FTP publisher plugin插件
- android startActivityForResult()为什么立即执行
- 排序总结
- Linux下shell脚本中的read命令
- [leetcode] 310. Minimum Height Trees
- LIBSVM在Matlab下的使用
- 201406-201609 个人总结
- Vuejs——(4)v-if、v-for
- Jenkins进阶系列之——06FTP publisher plugin插件下载(支持绝对路径)
- 微信企业号第三方应用开发[前言]
- 学spring security前的知识回顾
- vs2008 2010 2013初次尝试配置protobuf
- ios实现解析外设fat32文件系统(1)-基础工作