Number Of Ways To Reconstruct A Tree LeetCode solution in Python
1class Solution:2def checkWays(self, P):3g = defaultdict(set)4for u, v in P:5g[u].add(v)6g[v].add(u)78def helper(nodes):9d, m = defaultdict(list), len(nodes) - 110for node in nodes:11d[len(g[node])].append(node)1213if len(d[m]) == 0:14return 015root = d[m][0]1617for node in g[root]:18g[node].remove(root)1920comps, seen, i = defaultdict(set), set(), 02122def dfs(node, i):23comps[i].add(node)24seen.add(node)25for neib in g[node]:26if neib not in seen:27dfs(neib, i)2829for node in nodes:30if node != root and node not in seen:31dfs(node, i)32i += 13334cands = [helper(comps[i]) for i in comps]35if 0 in cands:36return 037if 2 in cands:38return 239if len(d[m]) >= 2:40return 241return 14243return helper(set(g.keys()))