【LeetCode】310. Minimum Height Trees
来源:互联网 发布:淘宝上300的狗能买吗 编辑:程序博客网 时间:2024/04/30 08:05
题目:
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]
分析:
这道题的意思是从一个可以变成树的图中找出可以构造出最小高度的树的根节点。我一开始的想法是用DFS将每一个结点作为根结点遍历一遍,但是超时了。接着决定使用拓扑排序的思想,每一次通过循环将同一时间入队的度为1的结点删去,直到剩下的边小于等于1。最后剩下的一个或两个结点就是满足条件的结点。
代码:
class Solution {public: int depth = 0; vector<int> findMinHeightTrees(int n, vector<pair<int, int>>& edges) { vector<int> result; vector<int> degree; if(n == 1) { result.push_back(0); return result; } for(int i = 0;i<n;i++) degree.push_back(0); for(int i = 0;i<edges.size();i++) //计算结点的度 { degree[edges[i].first]++; degree[edges[i].second]++; } queue<int> q; for(int i = 0;i<n;i++) { if(degree[i] == 1) //将度为1的结点入队 { q.push(i); } } while(edges.size()>1) { int pp = q.size(); for(int k = 0;k<pp;k++) { int temp = q.front(); q.pop(); for(int i = 0;i<edges.size();i++) { if(edges[i].first == temp) { degree[edges[i].second]--; if(degree[edges[i].second]==1) { q.push(edges[i].second); } edges.erase(edges.begin()+i);//删去边 } if(edges[i].second == temp) { degree[edges[i].first]--; if(degree[edges[i].first]==1) { q.push(edges[i].first); } edges.erase(edges.begin()+i); } } } } while(!q.empty()) { int temp = q.front(); q.pop(); result.push_back(temp); } return result; }};
- 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
- 猜数字游戏——初探 python 界面编程
- MySQL 5.6 for Windows 解压缩版配置安装(转)
- jquery知识点
- php给日期加上一天
- Android温习之路Day7:java基础7
- 【LeetCode】310. Minimum Height Trees
- [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突
- 循迹小车代码v1.0测试版本
- Java基本
- [Android]Button连续点击的处理办法
- Linux 学习笔记 十四
- 二叉树求最大最小权值问题的面试题
- 前端 html 菜鸟起步
- 【小题集】临阵磨枪做一些题,锻炼思维,去混杭州了。