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