数组实现(quick find)
树实现(quick union)
合并两个节点A和B,则是将A的根节点指向B(或B的根节点指向A).
优化
基于节点总数的优化
如图,此时要将节点8合并到节点9上,此时的节点9的深度将会变为4,即树的最大深度为4.
可以考虑基于节点数的优化方式,比较节点8和节点9的节点总数,将节点总数小的节点指向节点总数大的节点.此时树的最大深度依旧为3.
基于深度的优化
如果采用基于节点总数的优化(如下图),节点7的总结点数大于节点8,将会使节点8指向节点7,此时树的深度将会变为4.
此时考虑另外一种优化方式,基于深度的优化,将深度小的节点指向深度大的.示例中节点7深度小于节点8,故将节点7指向节点8.
路径压缩
- 断开节点4,将节点4连接到节点4父节点的父节点(即节点2)
- 再从节点2向上遍历,断开节点2-7的连线,将节点2连接到节点7父节点的父节点(即节点8)