二叉搜索树,插入方法不会编译

时间:2013-02-17 15:49:40

标签: java binary-search-tree

我正在尝试在java中编写自己的二叉搜索树。我已经编写了所有方法,现在我正在尝试编写一个程序来测试方法。

然而,当我尝试实现我的“插入”方法时,它将无法编译,我不知道为什么。

public class lab05driver {
public static void main(String[] args) {
    BST q = new BST();

    int a = 5;
    String b = "jed";
    double c = 1.8;
    char d = 'r';
    boolean e = false;
    int f = 35;
    String g = "yay";
    double h = 2.1;
    char i = 'i';
    boolean j = true;

    Integer k = 5;
    q.insert(k);    
}}

我的BST课程如下:

public class BST implements myBST {

    private myTreeNode root;


    public BST() {

    }


    public void insert(Comparable x) {
        if(root == null) {
            root = new myTreeNode();
            root.data = x;
        } else if ( !lookup(x) ) {
            root.insert(x);
        }

    }


    ...more code...

}

,myBST看起来像:

public interface myBST {
    public void insert(Comparable x);
    public void delete(Comparable x);
    public boolean lookup(Comparable x);
    public void printPreOrder();
    public void printInOrder();
    public void printPostOrder();
}

最后,myTreeNode看起来像:

public class myTreeNode {

    public myTreeNode() {

    }

    public Comparable data ;

    public myTreeNode leftchild;

    public myTreeNode rightchild;

    public myTreeNode parent;

    public void insert(Comparable d) {
        //if less than
        //does left exist? if it doesnt, make it, give it d
        //if it exists call insertrecursive on rightchild
        if(d.compareTo(data) <= 0) {
            if(leftchild != null) {
                leftchild.insert(d);
            } else {
                leftchild = new myTreeNode();
                leftchild.data = d;
                leftchild.parent = this;
            }
        } else {
            if(rightchild != null) {
                rightchild.insert(d);
            } else {
                rightchild = new myTreeNode();
                rightchild.data = d;
                rightchild.parent = this;
            }
        }
    }

...more code...
}

它在lab05driver中的“q.insert(k)”处抛出错误。任何帮助/建议将不胜感激......

~~~~~ 编辑:对不起我jsut复制错误...有一个主方法和整数k是一个整数... 获取命令行的错误是: 警告:[unchecked] unchecked调用compareTo(T)作为原始类型的成员java.lang.Comparable

2 个答案:

答案 0 :(得分:0)

q.insert(k);是一个声明。陈述必须在方法中,目前不在方法中。

做类似的事情:

public class lab05driver
{
  public static void main( String[] args )
  {
    BST q = new BST();
    int a = 5;
    String b = "jed";
    double c = 1.8;
    char d = 'r';
    boolean e = false;
    int f = 35;
    String g = "yay";
    double h = 2.1;
    char i = 'i';
    boolean j = true;

    Integer k = 1; // changed because "Integer k = "test";" doesn't compile
    q.insert(k);
  }
}

请注意我用于该方法的签名。这是Java看作入口方法的签名(程序将在哪里开始)。

答案 1 :(得分:0)

我能看到的最明显的问题是:

    Integer k = "test";

k需要是某种整数 - 你已经为它分配了一个字符串。这不是有效的作业。有效值为-1,0,1等 - 任何整数值。

分配值后(或将k更改为String类),您的代码应该没问题