Given n nodes labeled 0 to n − 1 and a list of undirected edges, return true if the edges form a valid tree.
BFS from 0. Reaching an already-seen node that is not the node we came from means a cycle. At the end, every node must be seen.
1function validTree(n: number, edges: number[][]): boolean {2const adj: number[][] = Array.from({ length: n }, () => []);3for (const [a, b] of edges) { adj[a].push(b); adj[b].push(a); }4const parent = new Map([[0, -1]]), queue = [0];5while (queue.length) {6const u = queue.shift()!;7for (const v of adj[u]) {8if (v === parent.get(u)) continue;9if (parent.has(v)) return false;10parent.set(v, u); queue.push(v);11}12}13return parent.size === n;14}
Build the adjacency list.
Space: play/pause · ←/→: step