给一个无向图,判断其是否为一棵树。如果是树的话,所有的节点必须是连接的,也就是说必须是连通图,而且不能有环,所以就变成了验证是否是连通图和是否含有环。
import collections
class Solution(object):
def validTree(self, n, edges):
lookup = collections.defaultdict(list)
for edge in edges:
lookup[edge[0]].append(edge[1])
lookup[edge[1]].append(edge[0])
# 判断节点数
if len(lookup[edge[0]) > 2 or len(lookup[edge[1]) > 2:
return False
visited = [False] * n
if not self.helper(0, -1, lookup, visited):
return False
for v in visited:
if not v:
return False
return True
def helper(self, curr, parent, lookup, visited):
if visited[curr]:
return False
visited[curr] = True
for i in lookup[curr]:
#上一个节点不用访问
if i != parent and not self.helper(i, curr, lookup, visited):
return False
return True