261 Graph Valid Tree
261. Graph Valid Tree
1. Question
Givennnodes labeled from0ton - 1and 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:
Givenn = 5andedges = [[0, 1], [0, 2], [0, 3], [1, 4]], returntrue.
Givenn = 5andedges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]], returnfalse.
Note: you can assume that no duplicate edges will appear inedges. Since all edges are undirected,[0, 1]is the same as[1, 0]and thus will not appear together inedges.
2. Implementation
(1) BFS
class Solution {
public boolean validTree(int n, int[][] edges) {
List<Set<Integer>> adjList = new ArrayList<>();
for (int i = 0; i < n; i++) {
adjList.add(new HashSet<>());
}
for (int[] edge : edges) {
adjList.get(edge[0]).add(edge[1]);
adjList.get(edge[1]).add(edge[0]);
}
boolean[] visited = new boolean[n];
Queue<Integer> queue = new LinkedList<>();
queue.add(0);
while (!queue.isEmpty()) {
int curNode = queue.remove();
// found loop
if (visited[curNode]) {
return false;
}
visited[curNode] = true;
for (int nextNode : adjList.get(curNode)) {
queue.add(nextNode);
adjList.get(nextNode).remove(curNode);
}
}
for (boolean e : visited) {
if (!e) {
return false;
}
}
return true;
}
}(2) DFS
(3) Union Find
3. Time & Space Complexity
BFS: 时间复杂度O(n), 空间复杂度O(n)
DFS: 时间复杂度O(n), 空间复杂度O(n)
Union Find: 时间复杂度O(n), 空间复杂度O(n)
Last updated
Was this helpful?