261. Graph Valid Tree
Given n
nodes labeled from 0
to n-1
and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.
Example 1:
Input: n = 5, and edges = [[0,1], [0,2], [0,3], [1,4]]
Output: true
Example 2:
Input: n = 5, and edges = [[0,1], [1,2], [2,3], [1,3], [1,4]]
Output: false
Note: you can assume that no duplicate edges will appear in edges
. Since all edges are undirected, [0,1]
is the same as [1,0]
and thus will not appear together in edges
.
解题要点:
使用并查集,如两个点已经连上,则返回False。最后检查n,如果全部连上则n应该等于1,返回True,否则返回False。
class Solution(object):
def validTree(self, n, edges):
"""
:type n: int
:type edges: List[List[int]]
:rtype: bool
"""
def find(edges, i):
while i != edges[i]:
i = edges[i]
edges[i] = edges[edges[i]]
return i
def connected(edges, i, j):
return find(edges, i) == find(edges, j)
def union(edges, i, j):
rooti = find(edges, i)
rootj = find(edges, j)
edges[rooti] = rootj
res = [i for i in range(n)]
for i, j in edges:
if not connected(res, i, j):
union(res, i, j)
n -= 1
else:
return False
if n == 1:
return True
else:
return False
Last updated
Was this helpful?