Edge count + union-find
Time O(n α(n)) Space O(n)If edges ≠ n − 1, false. Otherwise union every edge; if any edge joins two nodes already connected, false.
class Solution {
private int[] parent;
public boolean validTree(int n, int[][] edges) {
if (edges.length != n - 1) return false;
parent = new int[n];
for (int i = 0; i < n; i++) parent[i] = i;
for (int[] e : edges) {
int a = find(e[0]), b = find(e[1]);
if (a == b) return false;
parent[a] = b;
}
return true;
}
private int find(int x) {
while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; }
return x;
}
}Verdict: Short and fast.