2011-02-12 7 views
5

現在、私は2Dレンジツリーを実装しています。私はNodeクラスのために(Javaで)もっともらしいモデルを考え出すのに問題があります。RangeTreeのノードのモデリング

ツリー内のノードは、ミッドレンジ値、右と左の子ポインタ、サブツリー、データポインタ、および/または前後のポインタのいずれかを持つことがあります。

私はミッドレンジ値と3つの別々の論理個

  • a)のノードにノードを分解した - 各ノードは、左、右、およびサブツリーポイントとミッドレンジ
  • B)ノードを有します。これは、リーフ以外のノードを表します。
  • c)次のprevとデータポインタではありません。これはリーフノードを表します。

私はコンポジットとデコレータのパターンを適用しようとしましたが、役に立たないです。 私が作ってみました:すべての可能なゲッター/セッターと

  1. Nodeインタフェース、すなわち:getMidRange、getLeft、GetRightを、setLeft、setRight、等...
  2. 2つのクラスがインタフェースを実装持つ:Node2DとLinkedNode (リーフノード)。 Node2Dは、リンクを次と前に保つ以外はすべて行いました。 LinkedNodeは次と前へのリンクしか保持しませんでした。

このように動作しますが、これを一連のクラスとしてモデル化するとうまくいく方法があれば、私はさまよっていましたか?

編集:範囲ツリー(短い情報):範囲ツリー - すべてのデータがリーフノードに格納され、ツリーは常に均衡します。さらに、すべての葉は同じ高さにあります。また、葉はソートされ、二重にリンクされたリストによって一緒にリンクされます。最後に、各リーフノードにはサブツリーがあります。これも範囲ツリーですが、次の属性でソートされたリーフがあります(元のツリーがxにソートされている場合はy)。

RangeTreeBreakdown

+1

構造が進化するにつれ、ノードは、リーフと非リーフの状態を切り替えていない場合は、私はBとCは、その2つの具象サブクラスであることとのうち、抽象クラスを作成するように誘惑されるだろう。バイナリ検索ツリーの場合のように、ノードが現在のところ子がなく、後で子を取得する可能性があるため、ノードがリーフである場合は、単一のクラスを使用します。私は相互作用がないので意味のあるパターンは見られませんが、私は距離木に慣れていません。 –

+0

はい、ノードはリーフからノンリーフに切り替わりません。すべてのデータはリーフに格納されます。申し訳ありませんが、私は質問を編集します。 – drozzy

答えて

1
abstract class AbstractNode { 
    int midRange; 
} 

class InnerNode extends AbstractNode { 
    AbstractNode left; 
    AbstractNode right; 
    AbstractNode subtree; 
} 

class LeafNode extends AbstractNode { 
    LeafNode next; 
    LeafNode prev; 
    Object data; 
} 
+0

私は何をしたかのように見えますが(データのジェネリック型) @drozzy、これに何か問題はありますか? –

+0

いいえ、これはうまくいくと思います。これについては多くの方法がありますが、それは非常にコンテキスト固有のものだと思います。 – drozzy

関連する問題