二叉树一般问题
Binary Tree Generic Problemm
目前正在备考,我卡在了通用二叉树
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);
}
}
这是我的二叉树工具。当我尝试运行。下面的代码我得到了 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());
我没明白我哪里做错了?我应该为此创建抽象方法吗?
您的 getParent()
有一个 return 类型 T
;我的印象是你希望它是 BinaryTreeNode<T>
因为 BinaryTreeNode
的父节点应该是二叉树节点(最好是同一类型)。
您当前的设计类似于说 BinaryTreeNode
的父级可以是 String
或 Integer
或猫,而您正在调用 getValue()
在那上面,显然没有定义,因此是错误的。
对接口中方法声明中的 return 类型进行相同的编辑。
您出现错误的原因是 getParent()
和 getLeft()
return T
,即 String
,而您本想 return 这里是一个节点。
您在 BinaryTreeNode
接口中对 root、parent、left 和 right 的引用具有类型 T
,但这是节点需要引用的数据类型,而不是节点本身.将 return 值的数据类型和与值无关的方法的参数从 T
更改为 BinaryTreeNode<T>
。这当然会影响您实施中的相同声明 class BinaryTreeNodeImpl
.
目前正在备考,我卡在了通用二叉树
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);
}
}
这是我的二叉树工具。当我尝试运行。下面的代码我得到了 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());
我没明白我哪里做错了?我应该为此创建抽象方法吗?
您的 getParent()
有一个 return 类型 T
;我的印象是你希望它是 BinaryTreeNode<T>
因为 BinaryTreeNode
的父节点应该是二叉树节点(最好是同一类型)。
您当前的设计类似于说 BinaryTreeNode
的父级可以是 String
或 Integer
或猫,而您正在调用 getValue()
在那上面,显然没有定义,因此是错误的。
对接口中方法声明中的 return 类型进行相同的编辑。
您出现错误的原因是 getParent()
和 getLeft()
return T
,即 String
,而您本想 return 这里是一个节点。
您在 BinaryTreeNode
接口中对 root、parent、left 和 right 的引用具有类型 T
,但这是节点需要引用的数据类型,而不是节点本身.将 return 值的数据类型和与值无关的方法的参数从 T
更改为 BinaryTreeNode<T>
。这当然会影响您实施中的相同声明 class BinaryTreeNodeImpl
.