Check edge count, then DFS to verify connectivity.
function validTree(n, edges): if len(edges) != n - 1: return False adj = {i: [] for i in range(n)} for a, b in edges: adj[a].append(b) adj[b].append(a) visited = set() def dfs(node): if node in visited: return visited.add(node) for neighbor in adj[node]: dfs(neighbor) dfs(0) return len(visited) == n
time and space.