• ベストアンサー

ArrayListのなかにtreeを保存する方法。

複数の木を扱うときのことなんですが、 ArrayListのなかにtreeを保存する方法を教えてください。 以下のようにした場合: ArrayList<Node> list = new ArrayList<Node>(); listのなかにはnodeしか入ってない状態になると思うのですが、 この状態で、どのように木として扱えばいいのでしょうか? たとえばarraylistのindexが0と1のとこにAVLtreeを入れる場合、 その入れ方や、それぞれの木のnodeの参照の方法があれば教えてください。 一応、木が一つしかない場合の基本的なnodeの編集、add, delete, traverseについてはわかっています。どうかよろしくおねがいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.4

> このようにすることは可能でしょうか? やってみればわかるわ。 答えるまでもないわね。 > あとから木を修正したり葉をつけたりするにはどのようにしたらいいのでしょうか? ArrayListから取り出してつければいいだけよ。

2009googoo
質問者

お礼

やってみます ありがとうございました

その他の回答 (3)

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.3

補足があるようなので補足します。 うーむ、「木を自作した」ならばTreeクラス的な感じにコーディングするのが自然だと思うのですが。 > BinaryNode overallRoot1 = new BinaryNode("hello", null, null ); > overallRoot1.left = new BinaryNode("this is left", null, null ); ではちょっと自作の木とは呼びがたい気がします(いやたしかに自作の木といえばそうなんですけどね)。 それと、ArrayListですが、これは言ってしまえば「配列」です。 ただ可変長なだけです。 なので、配列でできることは何でもできます。 とりあえず配列だったらどうなるかを考えてみると良いかもしれません。

2009googoo
質問者

お礼

ありがとうございました。 なんとなくわかってきました。

  • LOHA
  • ベストアンサー率52% (203/388)
回答No.2

どういうものを考えているのか、想像しかねるのですが、木は自作するつもりなのでしょうか? もしそうであれば、listに入れるノードをルートとして ArrayList<Node> list = new ArrayList<Node>(); list.add(new Node); list.get(0).left = new Node(); ... といった感じになる(適当です)と思われます。 もし、コンテナを入れたいのであれば、例としてTreeMapを入れるとすれば ArrayList<TreeMap> list = new ArrayList<TreeMap>(); list.add(new TreeMap()); list.get(0).put("Key1","Value1"); String val1 = list.get(0).get("Key1"); という感じになるでしょう(これまた適当)。 以上、参考までに。

2009googoo
質問者

お礼

ありがとうございました

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

ええと、イメージとしては ArrayList<AVLtree> list = new ArrayList<AVLtree>(); こういうことかしら。 (AVLtreeというクラスがあるわけではないけど) だとするといったい何を悩んでいるのかがいまいちわからないんだけど。 Node node0 = list.get(0); で1つだけとり出せば その1つだけなら処理できるわけでしょ? ------------------------------------- それともこういうことかしら。 たった1つのAVLtreeがあって、その要素がArrayListの中に格納されている。 これだとしたら次のような説明ができるわ。 Node node0 = list.get(0); Node node1 = list.get(1); の2つがあって node0がnode1の親であるとする。 このとき、node1にnode2という子を接続したとする。 するとnode0の孫にもnode2が見えるわ。 これをオブジェクト指向的には「参照」と呼ぶけど。 もうちょっと書くと index0にいるnode0にnode1をつける、 index1にいるnode1にnode2をつける ・・・ indexnにいるnodenにnoden+1をつける を繰り返したあと index0のnode0を取得してみると node0の下にはn子のnodeが1列に連なるわよ。

2009googoo
質問者

補足

回答ありがとうございます。説明不足ですみません 木は自作したものです。 そして複数の木を扱うときのケースです。 (内部クラスにnodeをつくりました。) その場合、まずアレイリストつくって ArrayList<BinaryNode> list = new ArrayList<BinaryNode>(10); 次に木をつくって BinaryNode overallRoot1 = new BinaryNode("hello", null, null ); overallRoot1.left = new BinaryNode("this is left", null, null ); それをアレイリストに保存 list.add(overallRoot1); 次の木も同じように作って最後にアレイリストに保存 list.add(2番目の木のoverallRoot); このようにすることは可能でしょうか? その場合、 あとから、木を修正したり葉をつけたりするにはどのようにしたらいいのでしょうか? よろしくおねがいします。

関連するQ&A