英文:
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, '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++;
}
}
}
}
}
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;
}
专注分享java语言的经验与见解,让所有开发者获益!
评论