Rot-Schwart-Baum denkfehler im code?

d3rbastl3r

Bekanntes Mitglied
Hallo,
ich sitze jetzt schon ne weile an nem RotSchwarz-Baum und kriege immer wieder haufen exceptions o.0
Diese entstehen daher weil in dem Baum falsche funktionen angesprochen werden.

Hier erstmal der gesamte Code:
package com.d3rbastl3r.RBBaum (das RBBaum): Paste #235020 | LodgeIt!
package com.d3rbastl3r.RBBaum (das Interface): Paste #235021 | LodgeIt!
und die Testdateien:
Testklasse : Paste #235022 | LodgeIt!
Main: Paste #235023 | LodgeIt!

In der Main wird dieser Baum mit den Zahlen 10, 5 und 6 gespeist. (in genau der reihenfolge)
Die 10 ist hierbei das Root-Element
Die 5 müsste sich an den Linken zweig der 10 und die 6 an den rechten zweig der 5 heften.
Soweit funktioniert es einbahnfrei.

Nach einfügen der 6 müsste insertCase1(), zeile 246, das insertCase2() zum ersten mal starten usw.
das ganze läuft bis insertCase4().
In insertCase4(), zeile 287, tauchen die ersten fehler auf (zumindest soweit ich feststellen konnte).

Zeile 290 und 291 habe ich 2 testabfragen die nach der eingabe folgendes ergebnis erzielen sollten:
290: if(this == this.parent.right) //müsste auf jeden fall true ergeben
291: if(this.parent == getGrandparent().left) //müsste ebenfalls true ergeben

demnach sollte Zeile 292 auch true ergeben und die darunter stehenden anweisungen ausgeführt werden.
aus irgend einem grund ergibt zeile 290: if(this == this.parent.right) false deshalb wird die falsche rotation des baumes gestartet und das programm smeisst einen "NullPointerException" in zeile 367. (an dieser stelle wird die Späzielle rotation für das RootElement durchgeführt)


Eine weitere fehlermeldung ist mir ebenfalls rätselhaft: (Exception in thread "main" java.lang.NullPointerException)
Diese springt (scheinbar) willkürlich an verschiedensten stellen auf, ohne dass programm verändert wird ist diese manchmal hier und manchmal dort o.0
Eventuell könnte das ganze mit dem NIL element zusammenhängen *kopfkratz*


Also, falls einer von den pro´s hier den fehler im programmcode findet wär ich sehr dankbar xD





Ach ja, hier auch mal das gesamte NetBeans projeckt.
 

Anhänge

Zuletzt bearbeitet:
kriege immer wieder haufen exceptions
...
Eine weitere fehlermeldung ist mir ebenfalls rätselhaft: (Exception in thread "main" java.lang.NullPointerException)
Wie lauten die und in welcher Codezeile treten diese auf?
In diesen Fehlermeldungen wird ja ziemlich genau beschrieben welcher Fehler wo auftritt. Wenn man sich damit ein bisschen auseinandersetzt, kommt man meist sehr schnell alleine drauf.
 
Du musst irgendwo eine Verlinkung vergessen oder verloren haben, denn an besagter Stelle ist this weder linkes noch rechtes Kind vom parent.
 
Irgendwie komme ich einfach nciht weiter mit diesem Programm.

Also wenn ich alle verbindungen zwischen den Elementen in der Main ausgebe dann passt alles, wenn ich jedoch die verbindungen im "insertCase1()" ausgebe so zeigt jeder Parent jeweils left und right immer auf NIL o.0 ich verstehe es einfach nicht.


Hier mal das aktuelle NetBeans Projekt
 

Anhänge

Zuletzt bearbeitet:
Problem entlich behoben!

Das Problem war dass ich das insertCase1() im konstruktor des neuen elements aufgerufen habe. Diesen habe ich jetzt in die insert() methode verlagert: Paste #235785 | LodgeIt!

Trotzdem ist es mir rätselhaft wieso das im konstruktor nicht ging, vielleicht weis das jemand und würde mir das verraten 🙂
Solange lass ich diesen thread noch offen.
 
Initialisierungsreihenfolge? Man muss vorsichtig sein, was man im Konstruktor aufruft, da eventuall noch nicht alles initialisiert ist.
 

Neue Themen


Zurück
Oben