Minimum Height Trees
题目地址:
https://leetcode.com/problems/minimum-height-trees/#/description
题目:
解题思路:

这道题需要用bfs来解决。首先用一个List的set,这个是一个图叫做adj,然后用一个list的integer来作为leaves来存size为1的index,然后while循环来用bfs来做当n>=3的时候。
代码:
https://leetcode.com/problems/minimum-height-trees/#/description
题目:
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
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]
Note:
(1) According to the definition of tree on Wikipedia: “a tree is an undirected graph in which any two vertices are connected by exactlyone 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.
解题思路:

这道题需要用bfs来解决。首先用一个List的set,这个是一个图叫做adj,然后用一个list的integer来作为leaves来存size为1的index,然后while循环来用bfs来做当n>=3的时候。
代码:
public List<Integer> findMinHeightTrees(int n, int[][] edges) { if(n == 1){ List<Integer> rst = new ArrayList<Integer>(); rst.add(0); return rst; } // initialize the adjcent list List<Set<Integer>> adj = new ArrayList<Set<Integer>>(n); for(int i = 0; i <= n - 1; i++){ adj.add(new HashSet<>()); } for(int[] edge : edges){ adj.get(edge[0]).add(edge[1]); adj.get(edge[1]).add(edge[0]); } List<Integer> leaves = new ArrayList<>(); for(int i = 0; i <= n - 1; i++){ if(adj.get(i).size() == 1){ leaves.add(i); } } while(n >= 3){ List<Integer> next = new ArrayList<>(); n -= leaves.size(); for(int leaf : leaves){ int i = adj.get(leaf).iterator().next(); adj.get(i).remove(leaf); if(adj.get(i).size() == 1){ next.add(i); } } leaves = next; } return leaves; }

Comments
Post a Comment