【发布时间】:2018-12-13 07:33:18
【问题描述】:
一段时间以来一直在尝试解决这个问题。我得到了一个不相交集中的节点。节点的实现是一个类,它要么有不同的父节点,要么是自己的
class Node {
Node parent;
int rank;
//...constructor and method declarations}
现在,我必须为这个类实现带有路径压缩的 Find 方法,称为 getParent() 方法。我写了以下代码:
Node getParent(){
while(parent != this)
{
parent = parent.getParent();
}
return parent;
我得到了这个代码的无限递归。我知道这是有问题的,但我不知道如何解决它。我尝试使用 this 关键字,但它导致了同样的错误。
请帮忙。此外,了解如何以迭代方式编写此代码将是一个很好的加分项。
另外,我想重构树,使得调用 getParent() 的节点和根节点之间的所有中间节点都有一个共同的父节点,即根节点。
【问题讨论】:
-
我不明白你为什么在
getParent()方法中使用while语句而不是return parent? -
getParent()方法的目的是什么?返回节点的第一个父节点还是找到父节点的根? -
@hamidghasemi 的目的是找到分支上所有父母的根,并将该根分配给分支上的所有孩子、孙子等
-
@VedantPathak 斯蒂芬回答了您问题的第一部分(查找分支中所有元素的根)。在您问题的第二部分(将该根分配给分支上的所有子代、孙代等),您是否要破坏当前的树结构并创建最大深度为 1 的树?还是我误解了你的要求?
-
@hamidghasemi 是的,这是正确的,我确实想创建一棵最大深度为 1 的树
标签: java disjoint-sets