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.
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
Example 1:
Input: n = 5 edges = [[0, 1], [0, 2], [0, 3], [1, 4]]
Output: true.
Example 2:
Input: n = 5 edges = [[0, 1], [1, 2], [2, 3], [1, 3], [1, 4]]
Output: false.
public class Solution {
public boolean validTree(int n, int[][] edges) {
if(n==1)
return true;
int[] parent = new int[n];
boolean[] visited = new boolean[n];
for (int i = 0; i < n; i++) {
parent[i] = i;
}
for (int[] edge : edges) {
visited[edge[0]] = true;
visited[edge[1]] = true;
int p1 = find(parent, edge[0]);
int p2 = find(parent, edge[1]);
if (p1 == p2)
return false;
parent[p1] = p2;
}
boolean allVisited = true;
for (boolean x : visited)
allVisited = allVisited && x;
return true && allVisited;
}
public int find(int[] parent, int node) {
if (node != parent[node])
parent[node] = find(parent, parent[node]);
return parent[node];
}
}
Last updated