Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe eine Klasse geschrieben die ein Binärbaum konstruieren sollte und eine Testklasse, die es testen sollte.
Leider bekomme ich nur die "Spitze" des Baumes zurück. Ich finde meinen Fehler nicht.
Java:
public class Tree {
private int value;
private Tree left;
private Tree right;
private Tree node;
public Tree(int i) {
left = right = node = null;
value = i;
}
public void insert(Tree node) {
if (this.value < node.value) {
if (left == null)
left.value = node.value;
else
left.insert(node);
} else if (this.value > node.value) {
if (right == null)
right.value = node.value;
else
right.insert(node);
} else if (this.value == node.value) {
// Fehlermeldung
throw new IllegalArgumentException();
}
}
public void print() {
System.out.println(value);
if (left != null)
left.print();
if (right != null)
right.print();
}
}
Java:
import org.junit.Test;
public class TreeentryTest {
@Test
public void test() {
int[] a = { 1, 2, 3, 4, 5 };
Tree t = new Tree(3);
t.print();
t.insert(new Tree(1));
t.print();
t.insert(new Tree(2));
t.print();
t.insert(new Tree(3));
t.print();
t.insert(new Tree(4));
t.print();
}
}
Edit: Also mir ist klar, dass ich ein Algorithmus brauche, der mir die Mitte des Arrays berechnet und ich muss es dann rekursiv auf die Klasse anwenden, aber ich weiß nicht wie ich das praktisch umsetzen soll.
Ist jetzt aber dann ein anderer Ansatz:
(Ansatz übernommen aus Link Forum)
Java:
public class TreeentryTest {
@Test
public void test() {
int[] a = { 1, 2, 3, 4, 5, 9 };
int i;
Tree root = new Tree(a[0]);
LinkedList<Tree> listOfNodes = new LinkedList<Tree>();
listOfNodes.add(root);
boolean fertig = false;
i = 1;
while (!fertig) {
LinkedList<Tree> tempList = (LinkedList<Tree>) listOfNodes.clone();
for (Tree node : tempList) {
listOfNodes.remove();
// LEFT und RIGHT kann man noch etwas zusammenfassen, wenn man will
// LEFT
if (i < a.length) {
Tree tree = new Tree(a[i]);
node.setLeft(tree);
i++;
listOfNodes.add(tree);
}
// RIGHT
if (i < a.length) {
Tree tree = new Tree(a[i]);
node.setRight(tree);
i++;
listOfNodes.add(tree);
}
node.printTree();
if (i >= a.length) {
fertig = true;
break;
}
}
}
}
}
public class Tree {
private int value;
private Tree left;
private Tree right;
public Tree(int value) {
super();
this.value = value;
left = right = null;
}
public void printTree() {
System.out.println("Node:" + value);
if (left != null) {
System.out.println("Left:" + left.value);
}
if (right != null) {
System.out.println("Right:" + right.value);
}
System.out.println();
}
public Tree getLeft() {
return left;
}
public void setLeft(Tree left) {
this.left = left;
}
public Tree getRight() {
return right;
}
public void setRight(Tree right) {
this.right = right;
}
}
Edit: Also mir ist klar, dass ich ein Algorithmus brauche, der mir die Mitte des Arrays berechnet und ich muss es dann rekursiv auf die Klasse anwenden, aber ich weiß nicht wie ich das praktisch umsetzen soll.