声明一个二进制树,它采用一般类型的节点,其中包含一般类型的键值?

时间:2012-04-22 06:47:18

标签: java generics binary-tree nodes

如果我有一个节点类可以接受它的键值的泛型类型:

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来获取泛型和语法,我将非常感谢任何帮助或见解。

谢谢!

3 个答案:

答案 0 :(得分:1)

二叉树结构基本上只包含对根节点的引用。所以它应该具有与其节点相同的类型参数:

class BinaryTree<K extends Comparable<K>> {

    Node<K> root;
}

或者是键值设计:

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

    KeyValueNode<K, V> root;
}

请注意,是否需要封闭树类是有争议的,因为它是指向彼此的节点。

答案 1 :(得分: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参数化类。

答案 2 :(得分:0)

这就是我编写通用二叉树类的方法

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

(虽然我假设你不会真的在二叉树中讲述BinaryTree,这只是为了展示如何宣布它的例子)