Graph Valid Tree
最容易想的就是并查集算法了,因为这里的edge都是无向的,所以理论上我们可以以树上的任何一个点为并查集的头结点,这样一直添加搜索下去,如果此图真的是一颗树,则并查集里面只可能有一个联通分量,此外如果edges的长度不等于n - 1可以直接判错,因为n个结点的树就是有n - 1条边,不多不少,另外这里的树指的不是二叉树,而是各种类型的树都算
class Solution(object):
def validTree(self, n, edges):
"""
:type n: int
:type edges: List[List[int]]
:rtype: bool
"""
m = len(edges)
if m != n - 1:
return False
parent = [-1] * n
total = n
for st, ed in edges:
a = self.find(parent, st)
b = self.find(parent, ed)
if a != b:
parent[a] = b
total -= 1
return total == 1
def find(self, parent, node):
if parent[node] == -1:
return node
parent[node] = self.find(parent, parent[node])
return parent[node]