class Solution {
public:
bool validTree(int n, vector<vector<int>>& edges)
{
vector<vector<int>> graph(n, vector<int>());
for (auto& edge : edges)
{
graph[edge[0]].push_back(edge[1]);
graph[edge[1]].push_back(edge[0]);
}
unordered_set<int> seen;
return dfs(graph, seen, 0, -1) && seen.size() == n;
}
bool dfs(vector<vector<int>>& graph, unordered_set<int>& seen, int node, int parent)
{
if (seen.count(node)) return false;
seen.insert(node);
for(int nei : graph[node])
{
if (parent != nei)
{
if (!dfs(graph, seen, nei, node))
return false;
}
}
return true;
}
};