我正在尝试实现一个二叉搜索树作为分配。我们正在解决派生,继承等问题,因此该树可能包含各种不同类型的数据。
[在过去的作业中,我使用基类指针作为数据类型,并利用RTTI / upcasting / downcasting访问数据,我读到这是低效率的做法,因此,我试图摆脱它。
为此,我正在尝试实现通用的节点/树结构,但是有几个问题。首先,当涉及到从通用数据成员调用“ display”方法时,那有可能吗?由于该节点可能不知道正在存储什么类型的数据,或者该方法是否存在甚至可以被调用?
第二,当尝试将对象强制转换为我得到未经检查的强制转换异常时,有没有办法解决这个问题?还是进行检查的演员表?
任何建议或有用的解决方案,我们将不胜感激。
编辑:这是一些代码...BSTNode实现:
/**
* Class declaration for a BST Node. Holds left and right pointers, and a data
* member. Contains methods for getting/setting left, right, and data.
*/
public class BSTNode<T extends Comparable<T>> {
private BSTNode<T> left, right, next; //ptr for left/right/next nodes.
private T data; //Integer for data.
public BSTNode(){
left = right = next = null; //Set left/right/next ptrs to NULL.
}
public BSTNode(T n){
left = right = next = null; //Sets left/right/next ptr to NULL.
this.data = n; //Init data to passed in arg.
}
public BSTNode<T> getLeft() {return this.left;}
public BSTNode<T> getRight() {return this.right;}
public BSTNode<T> getNext() {return this.next;}
public T getData() {return this.data;}
public void setLeft(BSTNode<T> left) {this.left = left;}
public void setRight(BSTNode<T> right) {this.right = right;}
public void setNext(BSTNode<T> n) {this.next = n;}
public void setData(T d) {this.data = d;}
}
插入:
public class Interface<T extends Comparable<T>> extends Utility {
...
case 1:
Subjob sub1 = new Subjob("Test");
BSTNode<T> temp = new BSTNode<T>(sub1); //ERROR ON THIS LINE
exit = true;
return 1;
类似界面的声音应用作BST的基础。该接口需要具有可比性(BST要求),并提供方法display()。然后取决于实现方式来正确提供该方法。
界面可能看起来像:
public interface Displayable<T> extends Comparable<T> {
void display();
}
在BST内部,它可能具有如下节点:
public class Node<T> {
Displayable<T> value;
Node<T> left;
Node<T> right;
}