题目描述:
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
.
class Solution {
public:
bool validTree(int n, vector<vector<int>>& edges) {
for(int i=0;i<n;i++) parent[i]=i;
for(auto& edge:edges)
{
int u=edge[0], v=edge[1];
int x=find(u), y=find(v);
if(x==y) return false;
else parent[x]=y;
}
return edges.size()==n-1; // 最后发现无环的时候,边数必须是点数减一,这样才能保证图连通
}
int find(int x)
{
while(parent[x]!=x) x=parent[x];
return x;
}
private:
unordered_map<int,int> parent;
};