这道题我们之后要用并查集来做点击打开链接,现在用的是bfs。
这个要联系graph clone那道题。
注意题目声明的是无向图,所以第二个for循环,必须得初始化两个值,[2, 0], [2, 1],是许可的。
注意这个for的写法:
for (int i: neighbors) {
if(!set.contains(i))
queue.offer(i);
}
public class Solution {
public boolean validTree(int n, int[][] edges) {
// if (n < 1 || edges == null || edges.length == 0 || edges[0] == null || edges[0].length == 0) {
// return false;
// }
List<List<Integer>> lists = new LinkedList<>();
for (int i = 0; i < n; i++) {
//lists.add(new LinkedList<>);
lists.add(new LinkedList<>());
}
for (int[] edge: edges) {
lists.get(edge[0]).add(edge[1]);
lists.get(edge[1]).add(edge[0]);
}
Set<Integer> set = new HashSet<>();
Queue<Integer> queue = new LinkedList<>();
queue.offer(0);
while(!queue.isEmpty()) {
int num = queue.poll();
if (!set.add(num)) {
return false;
}
List<Integer> neighbors = lists.get(num);
for (int i: neighbors) {
if(!set.contains(i))
queue.offer(i);
}
}
return set.size() == n;
}
}
Given n
nodes labeled from 0
to n - 1
and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.
For example:
Given n = 5
and edges = [[0, 1], [0, 2], [0, 3], [1, 4]]
, return true
.
Given n = 5
and edges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]]
, return false
.