对于一组数据,并查集主要支持两个动作:
- union(p,q) – 将 p 和 q 两个元素连接起来。
- find(p) – 查询 p 元素在哪个集合中。
- isConnected(p,q) – 查看 p 和 q 两个元素是否相连接在一起。
在上一小节中,我们用 id 数组的形式表示并查集,实际操作过程中查找的时间复杂度为 O(1),但连接效率并不高。
本小节,我们将用另外一种方式实现并查集。把每一个元素,看做是一个节点并且指向自己的父节点,根节点指向自己。如下图所示,节点 3 指向节点 2,代表 3 和 2 是连接在一起的,节点2本身是根节点,所以指向自己。