Java中的通用二进制搜索树实现-调用通用方法和强制转换异常

我正在尝试实现二进制搜索树作为分配。我们正在解决派生,继承等问题,因此该树可能包含各种不同类型的数据。

在过去的作业中,我曾使用基类指针作为数据类型,并利用RTTI /上播/下播来访问数据,我读到这是低效且不好的做法,因此我试图摆脱它。

为此,我正在尝试实现一个通用的节点/树结构,但是存在一些问题。首先,当涉及到从通用数据成员调用“ 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>> extends Job {

    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;
}
点赞
评论