Skip to content

Commit fe7ddfa

Browse files
committed
Update graph-valid-tree.cpp
1 parent 170e7ef commit fe7ddfa

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

C++/graph-valid-tree.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Time: O(|V| + |E|)
22
// Space: O(|V| + |E|)
33

4+
// Same complexity, but faster version.
45
class Solution {
56
public:
67
struct node {
@@ -47,3 +48,42 @@ class Solution {
4748
return visited.size() == n;
4849
}
4950
};
51+
52+
// Time: O(|V| + |E|)
53+
// Space: O(|V| + |E|)
54+
class Solution2 {
55+
public:
56+
struct node {
57+
int parent = -1;
58+
vector<int>neighbors;
59+
};
60+
61+
bool validTree(int n, vector<pair<int, int>>& edges) {
62+
unordered_map<int, node> nodes;
63+
for (const auto& edge : edges) {
64+
nodes[edge.first].neighbors.emplace_back(edge.second);
65+
nodes[edge.second].neighbors.emplace_back(edge.first);
66+
}
67+
68+
unordered_set<int> visited;
69+
queue<int> q;
70+
q.emplace(0);
71+
while (!q.empty()) {
72+
const int i = q.front();
73+
q.pop();
74+
visited.emplace(i);
75+
for (const auto& node : nodes[i].neighbors) {
76+
if (node != nodes[i].parent) {
77+
if (visited.find(node) != visited.end()) {
78+
return false;
79+
} else {
80+
visited.emplace(node);
81+
nodes[node].parent = i;
82+
q.emplace(node);
83+
}
84+
}
85+
}
86+
}
87+
return visited.size() == n;
88+
}
89+
};

0 commit comments

Comments
 (0)