1

キー値のジェネリック型を受け入れることができるノード クラスがある場合:

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の構文のコツをつかもうとしています。助けや洞察をいただければ幸いです。

ありがとう!

4

3 に答える 3

1

バイナリ ツリー構造は、基本的にルート ノードへの参照を保持するだけです。そのため、ノードと同じ型パラメーターを持つ必要があります。

class BinaryTree<K extends Comparable<K>> {

    Node<K> root;
}

または、キーと値の設計の場合:

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

    KeyValueNode<K, V> root;
}

お互いを指しているノードであるため、囲んでいるツリー クラスが必要かどうかは議論の余地があることに注意してください。

于 2012-04-23T02:38:56.287 に答える
0

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

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

ジェネリック型を定義する目的のように、クラスをパラメーター化することBinaryTree<Node<K>>はありません。

于 2012-04-22T07:08:02.407 に答える
0

これは、一般的な二分木クラスを書く方法です

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

(ただし、バイナリツリーで BinaryTree を実際にストーリー化することはないと思いますが、それは、宣言方法を示すための例に過ぎませんでした)

于 2012-04-22T07:14:49.383 に答える