【题目描述】
Givennnodes labeled from0ton - 1and a list ofundirectededges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.
【注】You can assume that no duplicate edges will appear in edges. Since all edges areundirected,[0, 1]is the same as[1, 0]and thus will not appear together in edges.
给出n个节点,标号分别从0到n - 1并且给出一个无向边的列表 (给出每条边的两个顶点), 写一个函数去判断这张`无向`图是否是一棵树
【注】你可以假设我们不会给出重复的边在边的列表当中.无向边[0, 1]和[1, 0]是同一条边, 因此他们不会同时出现在我们给你的边的列表当中。
【题目链接】
www.lintcode.com/en/problem/graph-valid-tree/
【题目解析】
初始化Union Find的father map,让每一个节点的初始parent指向自己(自己跟自己是一个Group);在循环读取edge list时,查找两个节点的parent,如果相同,说明形成了环(Cycle),那么这便不符合树(Tree)的定义,反之,如果不相同,则将其中一个节点设为另一个的parent,继续循环。
此外还有需要注意的是对于vertex和edge的validation,|E| = |V| - 1,也就是要验证edges.length == n,如果该条件不满足,则Graph一定不是valid tree。
【参考答案】