Graph Valid Tree
Input:
n = 5
, and
edges = [[0,1], [0,2], [0,3], [1,4]]
Output:
trueInput:
n = 5,
and
edges = [[0,1], [1,2], [2,3], [1,3], [1,4]]
Output:
falseLast updated
Input:
n = 5
, and
edges = [[0,1], [0,2], [0,3], [1,4]]
Output:
trueInput:
n = 5,
and
edges = [[0,1], [1,2], [2,3], [1,3], [1,4]]
Output:
falseLast updated
class Solution:
def validTree(self, n: int, edges: List[List[int]]) -> bool:
seen = set()
graph = {i:[] for i in range(n)}
for e in edges:#undirected
graph[e[0]].append(e[1])
graph[e[1]].append(e[0])
return self.dfs(graph,seen,0,-1) and len(seen) == n
def dfs(self, graph, seen,node,parent):
if node in seen:
return False
seen.add(node)
return all([self.dfs(graph,seen,n,node) for n in graph[node] if n!=parent]) #child!=grandparentclass Solution:
def validTree(self, n: int, edges: List[List[int]]) -> bool:
if len(edges) != n-1: return False #别忘了这个!!!!!!!!
g,q = {i:[] for i in range(n)},[0]
for a,b in edges:#undirected
g[a].append(b)
g[b].append(a)
for i in q:
q+=g.pop(i,[])
return not gclass Solution:
def validTree(self, n: int, edges: List[List[int]]) -> bool:
if len(edges) != n-1: return False #别忘了这个
f = list(range(n))
def find(x):
if f[x]!=x:
f[x] = find(f[x])
return f[x]
for a,b in edges:
fa,fb = find(a),find(b)
if fa==fb:
return False
f[fa] = fb
return True