261. Graph Valid Tree
by Botao Xiao
Question
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.
Solution
- Method 1: Union find
class Solution { private int[] uf; public boolean validTree(int n, int[][] edges) { this.uf = new int[n]; for(int i = 0; i < n; i++) uf[i] = i; for(int[] edge : edges){ int p = find(edge[0]); int q = find(edge[1]); if(p == q) return false; uf[p] = q; } int count = 0; for(int i = 0; i < n; i++) if(uf[i] == i) count++; return count == 1; } private int find(int i){ if(uf[i] != i){ uf[i] = find(uf[i]); } return uf[i]; } }
Subscribe via RSS