昨晚迷迷糊糊写的
忘记了树的条件是不成环,
今天捡起来debug半天
才发现最后比较的不应该是父节点相同 而应该是根结点相同
其实最明智的做法是判断给出的边数,如果之前没成环,边数=n-1,那么就是树!
class Solution {
public:
/**
* @param n: An integer
* @param edges: a list of undirected edges
* @return: true if it's a valid tree, or false
*/
vector<int>f;
int fnd(int x) {
if (f[x] != x) {
f[x] = fnd(f[x]);
}
return f[x];
}
bool uni (int x, int y) {
int a = fnd(x);
int b = fnd(y);
if (a != b) {
f[a] = b;
return false;
}
return true;
}
bool validTree(int n, vector<vector<int>> &edges) {
// write your code here
for(int i = 0; i < n; i ++) {
f.push_back(i);
}
bool flag = true;
for(int i = 0; i < edges.size() && flag; i ++) {
if (uni(edges[i][0], edges[i][1])) {
flag = false;
}
}
if (!flag) {
return false;
}
for (int i = 0; i < n - 1; i ++) {
if (fnd(i) != fnd(i+1)) {
return false;
}
}
return true;
}
};