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;
    }
}

results matching ""

    No results matching ""