二进制树中的Java泛型,不兼容的类型错误

时间:2015-10-17 14:32:06

标签: java generics tree

我正在尝试使用Generics在java中实现二进制树,我搜索并找到了这个问题:Implementing Binary Tree in Java with Generic Comparable<T> data?,但我无法解决我的疑虑。所以我有两个班,

BST_Tree<T> 

Node<T extends Comparable<T>> 

我希望我的实施可以:

  1. 获取每种类型的Object并将其放入Node

  2. 中的字段key
  3. 将每个节点与key字段

  4. 进行比较

    这是代码:

    public class Node < T extends Comparable < T >> {
    
        private T key;
        private Node left;
        private Node right;
        private Node p;
    
        public void setKey(T key) {
            this.key = key;
        }
    
        public T getKey() {
            return key;
        }
    
        public Node getLeft() {
            return left;
        }
    
        public Node getRight() {
            return right;
        }
    
        public void setLeft(Node left) {
            this.left = left;
        }
    
        public void setRight(Node right) {
            this.right = right;
        }
    
        public void setP(Node p) {
            this.p = p;
        }
    
        public boolean getBolCompMin(T key) {
            return this.key.compareTo(key) < 0;
        }
    }
    

    我的Node类假设扩展Comparable以便比较密钥。

    这是我的树:

    public class BST_Tree < T > {
    
        private ArrayList < Node > nodes;
        private Node root;
    
        public BST_Tree(Node root) {
            this.root = root;
        }
    
        public void insertNode(T key) {
            Node z = new Node();
            z.setKey(key);
            Node x = this.root;
            Node y = new Node();
    
            while (x != null) {
    
                y = x;
                if (z.getBolCompMin(x.getKey())) {
                    x = x.getLeft();
                } else {
                    x = x.getRight();
                }
            }
    
            z.setP(y);
    
            if (z.getBolCompMin(y.getKey())) {
                y.setLeft(z);
            } else {
    
                y.setRight(z);
            }
        }
        public void InOderWalk(Node x) {
            if (x != null) {
                InOderWalk(x.getLeft());
                System.out.println(x.getKey());
                InOderWalk(x.getRight());
            }
        }
    
        public Node getRoot() {
            return root;
        }
    }
    

    我的树尝试在节点z中设置密钥但它失败了。这是错误:

      

    不兼容的类型:T无法转换为java.lang.Comparable

    提前谢谢!

1 个答案:

答案 0 :(得分:1)

你的

public class BST_Tree<T>

应该是

public class BST_Tree<T extends Comparable<T>>

NodeBST_Tree类中的每个Node变量应为Node<T>

这将确保您只能使用实现BST_Tree的元素类型来实例化您的Comparable类。