Graph Valid Tree

Givennnodes labeled from0ton-1and 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 inedges. Since all edges are undirected,[0,1]is the same as[1,0]and thus will not appear together inedges.

分析

DFS

建图 graph = {i:[] for i in range(n)},无方向所以双向

从node 0起for loop,no cycle(dfs) and len(seen) ==n

seen这里做visited,不需要弹出因为树不回头

注意all用法。要排除grandparent!=neighbor是因为双向图,排除2个点互指的情况。

bfs

start from any node and delete every node we meet during the BFS. If there is any node left, then there is an isolated component.

注意dict pop用法,no isolated component =no cycle.

Union find

union two nodes that are already in the same group, then there is a cycle.

Last updated

Was this helpful?