261 Graph Valid Tree
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.
Example 1:
Input: n = 5, and edges = [[0,1], [0,2], [0,3], [1,4]]
Output: true
Example 2:
Input: n = 5, and edges = [[0,1], [1,2], [2,3], [1,3], [1,4]]
Output: false
Note: 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
time : O(edges * nodes) . O(m * n)
space: O(n)
class Solution {
public boolean validTree(int n, int[][] edges) {
if (n == 0 || edges == null) {
return true;
}
if (edges.length != n - 1) {
return false;
}
int[] roots = new int[n];
Arrays.fill(roots, -1);
for (int[] edge : edges) {
int x = find(roots, edge[0]);
int y = find(roots, edge[1]);
if (x != y) {
roots[x] = y;
}else {
return false;
}
}
return true;
}
public int find(int[] roots, int x) {
while (roots[x] != -1) {
x = roots[x];
}
return x;
}
}