如何从具有循环关系的数据集中形成树?

时间:2013-04-12 14:06:53

标签: java tree cyclic

我有一个这样的课程:

class Foo {
    public String name = "";
    public ArrayList<Foo> children = new ArrayList<Foo>();
}

现在,我有大约两千个'Foo'对象存储在ArrayList中,它们彼此相关,正如您从上面的代码片段中看到的那样。现在,这些关系可能是循环的:A可能有一个孩子B,可能有孩子C,可能有孩子A.我想要做的是打印出这些关系的树而忽略循环关系,如下所示:

ObjA
  ObjB
    ObjC
ObjD
  ObjB
    ObjA

我该怎么做?它不必是快速的或任何东西,这棵树主要用于确保我的程序的结果。

1 个答案:

答案 0 :(得分:1)

Foo需要一个print方法打印其内容,然后调用它所指向的print Foo方法。 Print获取包含已遍历的所有Foo个对象的HashSet。如果next位于visited,那么它就是一个周期的一部分而您不会调用其print方法。

class Foo {
    Foo next;
    void print(HashSet<Foo> visited) {
        System.out.println("this Foo's ID or whatever it is you're printing");
        visited.add(this);
        if(next != null && !visited.contains(next)) {
            next.print(visited);
        }
    }
}

您可能还想传递一个确定缩进级别的int参数 - 如果indent等于4,则在System.out.println之前打印4个空格,并增加indent当您在print上致电next时,请按2或4或其他任何内容。