树和二叉搜索树使用数组列表

huangapple 未分类评论58阅读模式
英文:

Trees and Binary Search Trees useing arraylist

问题

我试图做一个项目,在项目中我使用了一个ArrayList来创建一个二叉搜索树(BST)。我将第一个变量指定为父节点,因此在数组中的位置0上,我的问题是,如何在位置2上添加一个右叶节点,而不需要在位置1上已经有一个左叶节点?以下是我目前的代码,但我一直得到"java.lang.IndexOutOfBoundsException"错误:

import java.util.ArrayList;

public class test {

    public static void main(String[] args) {
        myData a = new myData(2, 'B', "joe:smo");
        myData b = new myData(7, 'B', "joe:smo");
        myData c = new myData(5, 'B', "joe:smo");
        myData d = new myData(2, 'B', "joe:smo");
        myData e = new myData(6, 'B', "joe:smo");
        myData f = new myData(9, 'B', "joe:smo");
        myData g = new myData(5, 'B', "joe:smo");
        myData h = new myData(11, 'B', "joe:smo");
        myData i = new myData(4, 'B', "joe:smo");
        
        BinaryStreeImplicit tree = new BinaryStreeImplicit();
        
        tree.root(a);
        tree.insert(b);
        tree.insert(c);
        tree.insert(d);
        tree.insert(e);
        tree.insert(f);
        tree.insert(g);
        tree.insert(h);
        tree.insert(i);
        tree.print();
    }

    static class BinaryStreeImplicit {

        int root = 0;
        ArrayList<myData> data = new ArrayList<myData>();
        int treeSize = 0;
        int lastIndex = 0;

        public void root(myData x) {
            data.add(x);
        }

        public void print() {
            for (int i = 0; i < data.size(); i++) {
                System.out.println(data.get(i).courseNumber);
            }
        }

        public void insert(myData x) {
            int n = 0;
            int r = 1;
            while (r == 1) {
                if (x.courseNumber < data.get(n).courseNumber) {
                    n = (root * 2) + 1;
                    if (data.get(n) == null) {
                        data.set(n, x);
                        r = 0;
                        treeSize++;
                    }
                } else {
                    n = (root * 2) + 2;
                    if (data.get(n) == null) {
                        data.set(n, x);
                        r = 0;
                        treeSize++;
                    }
                }
            }
        }
    }
}

public class myData {
    int courseNumber;
    char grade;
    String stuName;

    public myData(int courseNumber, char grade, String stuName) {
        this.courseNumber = courseNumber;
        this.grade = grade;
        this.stuName = stuName;
    }

    public int getCourseNumber() {
        return courseNumber;
    }

    public char getGrade() {
        return grade;
    }

    public String getStuName() {
        return stuName;
    }
}

希望这能帮助到你解决问题。

英文:

im trying to do a poject where Im using a arrayList to make a BST. im assigning my frist variable as the parent so at 0 in the array, my question is how can I then add a right leaf to that in spot 2 without already having a left leaf of spot 1? this is what I currently have and I keep getting the java.lang.IndexOutOfBoundsException

import java.util.ArrayList;

public class test{

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    myData a = new myData(2, &#39;B&#39;, &quot;joe:smo&quot;);
    myData b = new myData(7, &#39;B&#39;, &quot;joe:smo&quot;);
    myData c = new myData(5, &#39;B&#39;, &quot;joe:smo&quot;);
    myData d = new myData(2, &#39;B&#39;, &quot;joe:smo&quot;);
    myData e = new myData(6, &#39;B&#39;, &quot;joe:smo&quot;);
    myData f = new myData(9, &#39;B&#39;, &quot;joe:smo&quot;);
    myData g = new myData(5, &#39;B&#39;, &quot;joe:smo&quot;);
    myData h = new myData(11, &#39;B&#39;, &quot;joe:smo&quot;);
    myData i = new myData(4, &#39;B&#39;, &quot;joe:smo&quot;);
    
    
    BinaryStreeImplicit tree = new BinaryStreeImplicit();
    
    tree.root(a);
    tree.insert(b);
    tree.insert(c);
    tree.insert(d);
    tree.insert(e);
    tree.insert(f);
    tree.insert(g);
    tree.insert(h);
    tree.insert(i);
    tree.print();

}

static class BinaryStreeImplicit {

    int root = 0;
    ArrayList&lt;myData&gt; data = new ArrayList&lt;myData&gt;();
    int treeSize = 0;
    int lastIndex = 0;
    public void root(myData x) {
        data.add(x);
    }

    public void print() {
        for (int i = 0; i &lt; data.size(); i++) {
            System.out.println(data.get(i).courseNumber);
        }
    }

    public void insert(myData x) {
        int n = 0;
        int r = 1;
        while (r == 1) {
            if (x.courseNumber &lt; data.get(n).courseNumber) {
                n = (root * 2) + 1;
                if (data.get(n) == null) {
                    
                    data.set(n, x);
                    r = 0;
                    treeSize++;
                }
            } else {
                n = (root * 2) + 2;
                if (data.get(n) == null) {
                    data.set(n, x);
                    r = 0;
                    treeSize++;
                }

            }
        }
    }
}

myData class looks like this

public class myData {
int courseNumber;
char grade;
String stuName;

public myData(int courseNumber, char grade, String stuName) {
    this.courseNumber = courseNumber;
    this.grade = grade;
    this.stuName = stuName;
    
    
}

public int getCourseNumber() {
    return courseNumber;
}

public char getGrade() {
    return grade;
}

public String getStuName() {
    return stuName;
}

huangapple
  • 本文由 发表于 2020年4月11日 01:55:29
  • 转载请务必保留本文链接:https://java.coder-hub.com/61145894.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定