Redundant Connection

leetcode 684题,一个图是由一棵树多一条边,要求删去那条边,然后形成一棵树。
此题可用并查集来做,思路是,遍历所有的边,并用并查集来做归属划分,如果一个边的两个node分属于不同的集合,说明这条边不是多余的,是起到了联通作用的,相反,如果node已经被前面的边连入到一个集合中了,那么说明这条边是多余的了。

class Solution:
    def findRedundantConnection(self, edges):
        """
        :type edges: List[List[int]]
        :rtype: List[int]
        """

        def findParents(parents,now):

            if parents[now] != now:
                parents[now] = findParents(parents, parents[now])
            return  parents[now]


        edgesNum = len(edges)
        parents = [i for i in range(edgesNum+1)]

        for edge in edges:
            parent1 = findParents(parents, edge[0])
            parent2 = findParents(parents, edge[1])
            if parent1 == parent2:
                return edge
            else:
                parents[parent1] = parent2
        return []

代码实现比较标准的并查集,这里注意一下并查集使用了压缩路径的操作,压缩路径就是让查询的node直接指向root祖先,这样可以压缩树的层次。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页