目前正在攻读考试,我坚持使用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());
我不明白我做错了什么?我应该为此创建抽象方法吗?
答案 0 :(得分:0)
您的getParent()
的返回类型为T
;我的印象是你希望它是BinaryTreeNode<T>
,因为BinaryTreeNode
的父级应该是二叉树节点(最好是相同类型)。
您当前的设计类似于说BinaryTreeNode
的父级可以是String
或Integer
或猫,而您正在呼叫getValue()
,显然没有定义,因此错误。
对接口中方法声明中的返回类型进行相同的编辑。
答案 1 :(得分:0)
当您想要在此处返回节点时,您遇到错误的原因是getParent()
和getLeft()
返回T
,即String
。
您在BinaryTreeNode
界面中对root,parent,left和right的引用具有类型T
,但这是节点需要引用的数据类型,而不是节点本身。更改与T
到BinaryTreeNode<T>
的值无关的方法的返回值和参数的数据类型。这当然会影响实现类BinaryTreeNodeImpl
中的相同声明。