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)

相互リンクがないようにツリー構造を作成したいと思います。ツリー構造内の各人物は、1 つのフレンド リストにのみ存在できます。また、どのフレンド リストにも含まれない 1 人の人物が存在します (ツリーのルート)。各フレンドは 2 人のフレンドしか持てません。(これは二分木だと思います)

編集: Java が提供するツリーマップを使用できますか?

4

2 に答える 2

0

多分私は何かが欠けているかもしれませんが、ArrayList (または一般的なリスト) はタスクと何の関係がありますか? ある人が多くの人へのリンクを持つことができる場合、それはグラフです。たとえば、ツリーを使用して表現できない A->B->C->A のような循環がある場合があります。

人が友人のリストを持っているという事実は、グラフ内のノードを任意の数の他のノードにリンクできることを意味します。

ですから、グラフを作成する必要があると思います。

重複したリンク (例: A->B、B->A) を取り除きたい場合は、後処理ステップとしてそれを行います。

于 2013-04-03T16:04:34.633 に答える