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, andedges = [[0,1], [0,2], [0,3], [1,4]]Output: true
Example 2:
Input:n = 5,andedges = [[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.树的条件:
1. 没环
2. 所有的node都是连接在一起
class Solution {
public boolean validTree(int n, int[][] edges) {
int[] nums = new int[n];
int[] sizes = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = i;
sizes[i] = 1;
}
for (int[] e : edges) {
int root1 = find(nums, e[0]);
int root2 = find(nums, e[1]);
if (root1 == root2) return false;
if (sizes[root1] > sizes[root2]) {
nums[root2] = root1;
}else {
nums[root1] = root2;
}
}
int root = find(nums,0);
for (int i = 1; i < n; i++) {
if (root != find(nums, i)) return false;
}
return true;
}
private int find(int[] nums, int i) {
while (i != nums[i]) {
i = nums[i];
}
return i;
}
}
No comments:
Post a Comment