class Solution { public: bool helper(int nodeIdx, int nodeFrom, vector<vector<int> >& link, vector<int>& accessed){ if(link[nodeIdx].empty()) return true; if(accessed[nodeIdx]==1) return false; accessed[nodeIdx]=1; for(int i=0; !link[nodeIdx].empty(); i++){ int childrenNode=link[nodeIdx].back(); link[nodeIdx].pop_back(); if(childrenNode!=nodeFrom){ bool res = helper(childrenNode, nodeIdx, link, accessed); if(!res) return false; } } return true; } bool validTree(int n, vector<pair<int, int>>& edges) { if(edges.size()!=n-1) return false; vector<vector<int> > link(n); for(int i=0; i<edges.size(); i++){ link[edges[i].first].push_back(edges[i].second); link[edges[i].second].push_back(edges[i].first); } for(int i=0; i<link.size(); i++){ vector<int> accessed(n, 0); bool res = helper(i, i, link, accessed); if(!res) return false; } return true; } };