2012-04-22 8 views
1

私はそれがキー値だため、ジェネリック型を受け付けることができるノードクラス(複数可)をお持ちの場合:一般的なタイプのキー値を含む汎用タイプのNodeをとるバイナリツリーを宣言しますか?

class Node<K extends Comparable<K>> implements Comparable<Node<K> { 
    ... 
} 

class KeyValueNode<K extends Comparable<K>, V> extends Node<K> { 
    ... 
} 

は、それが含有することができる、ノードのジェネリック型を受け入れる一般的なバイナリツリーのクラスを宣言することは可能ですジェネリックタイプのキー値?私は、任意の明白な誤解のため

class BinaryTree<N<K>> { 
    N<K> root; 
    BinaryTree<N<K>> left, right; 
    ... 
} 

謝罪、私はまだ非常に任意のヘルプや洞察力をいただければ幸いです、ジェネリック医薬品のこつとJavaでの構文を取得しようとしている....それは次のようになりだろうと思いました。

ありがとうございます!

答えて

1

バイナリツリー構造は基本的にルートノードへの参照を保持します。それは、ノードなので、それは、外側の木のクラスが必要であるかどうか議論の余地だと

class KeyValueBinaryTree<K extends Comparable<K>, V> { 

    KeyValueNode<K, V> root; 
} 

注:

class BinaryTree<K extends Comparable<K>> { 

    Node<K> root; 
} 

またはキーと値の設計のために:だから、そのノードと同じ型パラメータを持つ必要がありますお互いを指している。

+0

Paulにはっきりと答えてくれてありがとう。ノードタイプを汎用にすることは可能ですか? BinaryTree 、K extends Comparable > { これは、いろいろなノードタイプに対して特定の挿入メソッドを指定しようとするとちょっと落ちました。 – xlm

0

あなたが言うことができます:

class BinaryTree<N extends Node<N>> { 
    Node<N> root; 
    // or even better: N root; 
    BinaryTree<N> left, right; 
} 

BinaryTree<Node<K>>を持つことthe purpose of defining a generic typeあるようがクラスをパラメータではありません。

+0

「N」が自己参照する理由がわかりません。 –

+0

正確にはどのような場所ですか? 'BinaryTree'は' N'の 'Node'のインスタンス/拡張でなければならない' N'上でパラメータ化されています。 – nobeh

+0

ツリーに、ノードのノードのノードではなく、いくつかの「Comparable」型のノードが含まれていてはなりませんか? –

0

これは、私はあなたが本当に物語のバイナリツリー内のBinaryTree、それはそれができるかを示すためにちょうどあなたの例のためだったではないだろうと仮定しますが、私は(

public class BinaryTree<N extends Node<K>, K extends Comparable> { 
    N root; 
    BinaryTree<N, K> left, right; 
} 

汎用的なバイナリツリークラスを作成する方法をです宣言された)

+0

なぜBinaryTreeにノードと左右のBinaryTreeを含めるのは良い考えではありませんか? – xlm