2

如何从 ArrayList 构建一个基本的对象树(在这种情况下,我的 Person 类中的 Person 对象)?从概念上讲,我了解树是如何工作的,如何将对象添加到我的数组列表中,但是我在树的构建方面遇到了很多麻烦,并且将节点链接在一起我似乎觉得不知所措。此外,从我所做的研究来看,递归算法似乎是解决这个问题的最佳方法。这是真的吗?我是Java初学者,所以请提供详细的答案,而不仅仅是代码。

这是我拥有的 Person 类以及我想要基于它的树中的对象。

public class Person{

    public int     id;     // some identification number unique to the person
    public boolean zombie; // true if the person is a zombie
    public char    state;  // p means human, z means zombie

    public ArrayList<Person> friends;  // list of friends

    public Person(int id, char state){
        this.id = id;
        this.state = state;
        //this.zombie = zombie;
    }

提前感谢您的任何输入和解释。非常感谢!

下面是示例输出并演示了所需的树层次结构

P          (this is Person q)
---P       (this is a friend of q, say q1)
------P    (this is a friend of q1)
------Z    (this is another friend of q1, who is a zombie)
---Z       (this is a friend of q, say q2, who is a zombie)
------Z    (this is a friend of q1, who is also a zombie)
------P    (this is a friend of q1, who is not a zombie)

id 喜欢创建树结构,这样就没有交叉链接。树结构中的每个人只能存在于一个朋友的列表中,并且会有一个人在没有人的朋友列表中(树的根)。每个朋友只能有两个朋友。(我假设这是一棵二叉树)

编辑:我可以使用 java 提供的树形图吗?

4

2 回答 2

0

也许我遗漏了一些东西,但是 ArrayList(或一般的列表)与任务有什么关系?如果任何人都可以链接到许多人,那么它就是一个图表。例如,它可能有像 A->B->C->A 这样的循环,你不能用树来表示。

一个人有一个朋友列表的事实意味着图中的一个节点可以链接到任意数量的其他节点。

所以我认为你应该建立一个图表。

如果您想摆脱重复的链接(例如 A->B、B->A),那么将其作为后处理步骤。

于 2013-04-03T16:04:34.633 回答
0

如果我正确正确地理解了问题,您可以使用带有 Comparator 的 TreeMap 来构建这样的树结构。遍历 ArrayList,将每个元素添加到树形图中。Comparator.compare(k1, k2) 应该实现您试图放在此处的关系。可以在此处找到示例 1和此处的示例 2

于 2013-04-03T16:18:59.010 回答