在BinarySearchTree中插入方法

时间:2015-04-09 16:23:12

标签: java binary-search-tree

嘿,我写了一些二进制搜索树,它有一个插入方法。 所以它得到一个要插入的对象,一个Char数组和一个Integer,它给它指数来看。

所以这是插入方法:

public void insert(Buchstabe pBuchstabe,char[] pChar,int pStelle)
{
    if(pBuchstabe==null)
        return;

    if(baum.isEmpty())
    {
        baum=new BinaryTree(pBuchstabe);
    }
    else 
    if(pStelle <= pChar.length)
    {
        if(pChar[pStelle] == '.')
        {
            Mybaum lTree=this.getLeftTree();
            lTree.insert(pBuchstabe,pChar,pStelle+1);
            this.baum.setLeftTree(lTree.baum);
        }
        else
        if(pChar[pStelle]=='-')
        {
            Mybaum lTree=this.getRightTree();
            lTree.insert(pBuchstabe,pChar,pStelle+1);
            this.baum.setLeftTree(lTree.baum);
        }
    }
}

我有一个传递所需参数的方法(在这种情况下):一个对象Buchstabe,然后是Char数组[&#39;。&#39;,&#39;。&#39;]和整数0到插入方法。

我得到一个超出范围的错误:

java.lang.ArrayIndexOutOfBoundsException: 2
at Mybaum.insert(Mybaum.java:22)
at Mybaum.insert(Mybaum.java:25)
at Mybaum.insert(Mybaum.java:25)
at Mörserbaum.einlesen(Mörserbaum.java:42)

有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

看起来你有问题

 if(baum.isEmpty())
    {
        baum=new BinaryTree(pBuchstabe);
    }
    else 
    **if(pStelle <= pChar.length)**
    {
        **if(pChar[pStelle] == '.')**
        {
            Mybaum lTree=this.getLeftTree();
            lTree.insert(pBuchstabe,pChar,pStelle+1);
            this.baum.setLeftTree(lTree.baum);
        }

if(pChar [pStelle] ==&#39;。&#39;) - 你得到indexOutOfBound bc /你需要说 if(pChar [pStelle-1] ==&#39;。&#39;)..因为Java数组索引从0开始,如果长度为5,则最后一个索引将是pChar [4] ...

此代码可能存在更多问题,因为我们没有完整的代码/上下文我无法推测更多...但这是您可以获得indexoutofbound的原因之一

答案 1 :(得分:0)

public void einlesen()
{
    Buchstabeenschlange sch = new Buchstabeenschlange();
    for(int i = 0;i<codeTabelle.length;i++)
    {
        Buchstabe a = new Buchstabe(alphabet[i],codeTabelle[i]);
        if(a == null)
        {
            System.out.println("Buchstabe mit Error == "+a);
        }
        System.out.println("Buchstabe == "+a);
         sch.hinzufuegen(a);

        System.out.println("------------");

    }
    List l = sch.gibListe();
    sch.druckeListe();
    l.toFirst();
    while(l.hasAccess())
    {

      Buchstabe buch = (Buchstabe) l.getObject();  
      char[] code = buch.getCode().toCharArray();
      baum.insert(buch,code,0);
      l.next();
    }
    TreeViewGUI view = new TreeViewGUI(baum);
}

这将创建对象Buchstabe并在List中对其进行排序,以便您在开头具有最短的字符串。 然后将它们插入到Binaray树中并显示它。