刘老师,当我们使用路径压缩时:
int find(int x){
assert(x >= 0 && x < count);
int r = x;//r root
while (r != p[r]){//如果是根结点,那么父结点就是自身
p[r] = p[p[r]];//因为根结点指向自身,所以永远不会出现索引超范围的错误,画图演示。
r = p[r]; //如果不相等,那么就让r不断地等于他的父节点
}
return r;
}
这时候,树的高度显然就发改变了,为什么这里不需要维护rank数组,如果要维护该如何写算法?
登录后可查看更多问答,登录/注册