二叉树通用问题

时间:2016-03-21 22:26:13

标签: java generics binary-tree

目前正在攻读考试,我坚持使用Generic Binary Tree

public interface BinaryTreeNode <T>{

    public void setParent(T binaryTreeNodeImpl);
    public void setLeft(T left);

    public void setRight(T right);
    public T getRoot() ;
    public T getParent();
    public void setValue(T string);
    public T getLeft();


}

是我的界面。

public class BinaryTreeNodeImpl <T> implements  BinaryTreeNode <T>{

    public T value;
    private T Root;
    private T right;
    private T parent;
    private T left;




    public void  setRight(T right) {
        this.right = right;
         ( (BinaryTreeNode<T>) right).setParent( (T) this);


    }
     public T getRoot() { 
         return  (T) Root; 
    }
      public void setValue(T value) {
          this.value=value;

      }
    public T getValue() {
        return value;
    }

    public T getParent() {
        return parent;
    }
    public void setParent(T binaryTreeNodeImpl) {
        parent= binaryTreeNodeImpl;

    }
    public T getRight() {
        return right;
    }

    public T getLeft() {
        return left;
    }


    public void setLeft(T left) {
        this.left =  left;
        (  (BinaryTreeNode<T>) left).setParent((T) this);
    }


}

这是我的二叉树实现。当我尝试运行时。 Bellow code我已经为String定义了Value方法。

BinaryTreeNode<String> root = new BinaryTreeNodeImpl<String>();
        root.setValue("abc");
        BinaryTreeNode<String> left = new BinaryTreeNodeImpl<String>();
        left.setValue("xyz");
        root.setLeft(left);
        System.out.println(left.getParent().getValue());
        System.out.println(root.getLeft().getValue()); 

我不明白我做错了什么?我应该为此创建抽象方法吗?

2 个答案:

答案 0 :(得分:0)

您的getParent()的返回类型为T;我的印象是你希望它是BinaryTreeNode<T>,因为BinaryTreeNode的父级应该是二叉树节点(最好是相同类型)。

您当前的设计类似于说BinaryTreeNode的父级可以是StringInteger或猫,而您正在呼叫getValue() ,显然没有定义,因此错误。

对接口中方法声明中的返回类型进行相同的编辑。

答案 1 :(得分:0)

当您想要在此处返回节点时,您遇到错误的原因是getParent()getLeft()返回T,即String

您在BinaryTreeNode界面中对root,parent,left和right的引用具有类型T,但这是节点需要引用的数据类型,而不是节点本身。更改与TBinaryTreeNode<T>的值无关的方法的返回值和参数的数据类型。这当然会影响实现类BinaryTreeNodeImpl中的相同声明。