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 回答