File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11// Time: O(|V| + |E|)
22// Space: O(|V| + |E|)
33
4+ // Same complexity, but faster version.
45class Solution {
56public:
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+ };
You can’t perform that action at this time.
0 commit comments