Hallo Ich habe eine Array-Liste, die einige Zahlen darin wie {23,16,45,26,2,5,9}
hat, und ich möchte einen binären Suchbaum mit dieser Array-Liste machen, die "array"
und seine Elemente sind Objekte, die 2
Felder hat, 1)digit2)level
aber hier möchte ich nur sein digit
field.Auch dList
ist ein DoublyLinkedList
. das ist mein Code, aber es wird eine Ausnahme werfen. Bitte helfen Sie mir, danke.binärer Suchbaum
private void method(ArrayList<Element> array) {
DNode header = new DNode(null, null, null);
DNode trailer = new DNode(null, header, null);
header.next = trailer;
DNode node = new DNode(array.get(0), header, trailer);
dList.addLast(node);
header = node
for(int i = 1;i<array.size();i++){
makeBST(node, array.get(i));
}
}
private void makeBST(DNode node, Element e) {
if (!e.equals(node.getElement())) {
DNode nodeOne = new DNode(e, null, null);
if (node.getElement().getDigit() > e.getDigit()) {
node.prev = nodeOne;
} else if (node.getElement().getDigit() < e.getDigit()) {
node.next = node;
}
}
if (e.getDigit() < node.getElement().getDigit()) {
makeBST(node.prev, e);
}
makeBST(node.next, e);
}
Ausnahme:
Exception in thread "main" java.lang.StackOverflowError
at OBST.GreedyVersion.makeBST(GreedyVersion.java:43)
at OBST.GreedyVersion.makeBST(GreedyVersion.java:54)
at OBST.GreedyVersion.makeBST(GreedyVersion.java:54)
at OBST.GreedyVersion.makeBST(GreedyVersion.java:54)
die erste Zeile der Ausnahme für diese Codezeile:
if (!e.equals(node.getElement()))
Wie kann ich den rekursiven Aufruf beenden? – user472221
Ich denke, Sie brauchen eine "Rückkehr" am Ende des ersten if-Block. Oder mit demselben Ergebnis können Sie die rekursiven makeBST-Aufrufe in entsprechende "else if" -Blöcke setzen. – TToni
@ user472221, TToni und iirekm haben es richtig gemacht. Bei einer rekursiven Endbedingung müssen Sie darüber nachdenken, wann die Rekursion angehalten werden muss (Hinweis: Was passiert, wenn Sie einen Baum der Größe 0 oder der Größe 1 haben?) - und wenn diese Bedingung erfüllt ist, müssen Sie die Funktion sicherstellen hört auf sich selbst zu nennen. – Assaf