Binärbaum - noch ein "klitzekleiner Fehler"

Status
Nicht offen für weitere Antworten.

TRex2003

Mitglied
hi,

ich sitz grad an der umsetzung eines binärbaumes..

Code:
public class baum {
	
	public baumelement root, e1, e2, e3;
	baum() {
		root = new baumelement();
		e1 = new baumelement();
		e1.höhe = 0;
	}	//Konstruktor
	
	public void einfuegen(String name) {
		System.out.println("\nNächstes Element: " + name);
		e2 = new baumelement();
		if (e1.höhe == 0)
			e1 = root;
		
		e2.name = name;
		
		e1.name = "Hallo";
		
//		vergleichen mit node
		
		if (e1.name.compareTo(e2.name) > 0 ) {			// kleiner
			System.out.println("LINKS von " + e1.name + ": " + e2.name);
//			wenn nächste node links nicht vorhanden => nächste node = dieses ding
			if (e1.links == null && e1.links.name == null) {
				e3 = new baumelement();
				e1.links = e3;
				e3.name = name;
				System.out.println("Element wurde links eingefügt: " + e3.name + " in Höhe " + e1.höhe);
			} else {
//			ansonsten node = nächste node links
				e2 = e1.links;
				e1 = e2;
				System.out.println("eins nach links unten");
				e1.höhe++;
				einfuegen(name);
			}
		} else if (e1.name.compareTo(e2.name) < 0) {	// größer
			System.out.println("RECHTS von " + e1.name + ": " + e2.name);
//			wenn nächste node rechts nicht vorhanden => nächste node = dieses ding
			if (e1.rechts == null && e1.rechts.name == null) {
				e3 = new baumelement();
				e1.rechts = e3;
				e3.name = name;
				System.out.println("Element wurde rechts eingefügt: " + e3.name + " in Höhe " + e1.höhe);
			} else {
//			ansonsten node = nächste node rechts
				e2 = e1.rechts;
				e1 = e2;
				System.out.println("eins nach rechts unten");
				e1.höhe++;
				einfuegen(name);
			}
		} else {										// gleich
//			namen gleich..
		}
		
	} //einfügen
}

if (e1.rechts == null && e1.rechts.name == null) {

und sein linker pendant lösen exceptions aus, aber ohne den zweiten ausdruck geht das ding nur bis zur zweiten ebene....

die ausgabe auf der konsole (mit einfuegen("...") gefüttert):

Code:
Nächstes Element: Ameise
LINKS von Hallo: Ameise
Element wurde links eingefügt: Ameise in Höhe 0

Nächstes Element: Xaver
RECHTS von Hallo: Xaver
Element wurde rechts eingefügt: Xaver in Höhe 0

Nächstes Element: Uzumaki
RECHTS von Hallo: Uzumaki
eins nach rechts unten

Nächstes Element: Uzumaki
RECHTS von Hallo: Uzumaki
Element wurde rechts eingefügt: Uzumaki in Höhe 1

Nächstes Element: Braunschweig
LINKS von Hallo: Braunschweig
Element wurde links eingefügt: Braunschweig in Höhe 1

Nächstes Element: Lumpi
RECHTS von Hallo: Lumpi
eins nach rechts unten

Nächstes Element: Lumpi
RECHTS von Hallo: Lumpi
Element wurde rechts eingefügt: Lumpi in Höhe 1

Nächstes Element: Alpha
LINKS von Hallo: Alpha
Element wurde links eingefügt: Alpha in Höhe 1

Nächstes Element: Beta
LINKS von Hallo: Beta
eins nach links unten

Nächstes Element: Beta
LINKS von Hallo: Beta
Element wurde links eingefügt: Beta in Höhe 1

Nächstes Element: Pfirsich
RECHTS von Hallo: Pfirsich
Element wurde rechts eingefügt: Pfirsich in Höhe 1

kann mir jemand helfen?
 

PyroPi

Aktives Mitglied
TRex2003 hat gesagt.:
if (e1.rechts == null && e1.rechts.name == null)

Ist ja klar, daß da ne NullPointerException kommt. Es wird geprüft, ob e1.rechts gleich null ist. Angenommen das ist der Fall, dann muß auch noch die zweite Bedingung erfüllt sein. Weil e1.rechts aber schon null ist, kann auf e1.rechts.name gar nicht zugegriffen werden. (... Wenn der rechte Unterbaum gar nicht existiert, dann schaue auch noch nach, ob er keinen Namen hat.)

Irgendwie ist dein Code recht undurchsichtig. Wozu sind denn e1, e2 und e3 da, wenn du schon links und rechts als Unterbäume hast?
 

TRex2003

Mitglied
e1 ist der jeweilige knoten, von dem aus verglichen wird. e2 ist das linke oder rechte darunter. links und rechts dienen der orientierung.

was die bedingung betrifft, habe ich eine elegantere lösung gefunden. allerdings war das nicht die erhoffte lösung..

ich habe im falle einer eintragung in den baum die node darüber als solche mithilfe einer boolean-variable gekennzeichnet und dementsprechend die bedingung geändert.

als ausgabe sehe ich aber immer noch überall "LINKS von Hallo" und "RECHTS von Hallo", was bedeutet, dass er den e1-Pointer nicht auf den gewünschten Knoten verschoben hat..

hab ich da evt was falsch verstanden?

in der letzten übung (das hier ist keine, ich wills nur rausfinden) haben wir mit linearen listen gearbeitet und uns mit e1.before / p.next etc in der liste bewegt. ich dachte, dass ich auf diese weise auch die knoten ansteuern kann.
 

PyroPi

Aktives Mitglied
Also im allgemeinen ist ein Binärbaum so aufgebaut:

Code:
class BinTree {
    BinTree left;  // Linker Unterbaum
    BinTree right;  // Rechter Unterbaum
    String name;  // Wert im Knoten


    // Wert einfügen (nur der Algorithmus)
    void insert(String n) {
        if (n < name)
            if (linkerBaumExistiert) links.insert(n)
            else links = neuerBaum(n);
        else (n > name)
            if (rechterBaumExistiert) rechts.insert(n)
            else rechts = neuerBaum(n);
        else
            System.out.println("Wort schon enthalten");
    }
}

Es macht sich wesentlich einfacher die Methode insert auf den jeweiligen Unterbäumen aufzurufen, dann brauchst du dir nicht irgendwelche Ersatzpointer anlegen, die du dann hin- und herschiebst. Dadurch treten nur unnötige Fehler auf.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
D Binärbaum Blätter finden und Ausgeben Java Basics - Anfänger-Themen 22
O BinärBaum einfügen Java Basics - Anfänger-Themen 13
E Erste Schritte Testklasse Binärbaum Java Basics - Anfänger-Themen 10
void19 Methoden Binärbaum Inorder Traversierung in Array speichern Java Basics - Anfänger-Themen 1
A Größten Eintrag aus Binärbaum löschen Java Basics - Anfänger-Themen 4
L Ganzen BinärBaum ausgeben? Java Basics - Anfänger-Themen 3
L Binärbaum (Stammbaum) Java Basics - Anfänger-Themen 8
S Binärbaum in PreOrder in ArrayList speichern Java Basics - Anfänger-Themen 0
J Methoden Binärbaum, Traversierung in Array speichern Java Basics - Anfänger-Themen 18
K BinärBaum Java Basics - Anfänger-Themen 4
J Max. Anzahl von Knoten im Binärbaum Java Basics - Anfänger-Themen 3
M Werte der Knoten in Binärbaum addieren (iterativ) Java Basics - Anfänger-Themen 6
C Binärbaum mit grafischer Ausgabe Java Basics - Anfänger-Themen 0
J Binärbaum formatiert ausgeben. Java Basics - Anfänger-Themen 7
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
W Größtes Element im unsortierten Binärbaum Java Basics - Anfänger-Themen 7
N Generischer Binärbaum - löschen Java Basics - Anfänger-Themen 1
M Binärbaum mit parent-Zeigern Java Basics - Anfänger-Themen 1
B Methoden BinärBaum als String Knoten löschen Java Basics - Anfänger-Themen 5
S Binärbaum kopieren Java Basics - Anfänger-Themen 6
B Binärbaum mit java implementieren! Java Basics - Anfänger-Themen 5
D Binärbaum Suche Java Basics - Anfänger-Themen 5
D Binärbaum probleme Java Basics - Anfänger-Themen 4
P Binärbaum - Primärschlüssel Java Basics - Anfänger-Themen 3
X Fehler Binärbaum Java Basics - Anfänger-Themen 6
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
P Binärbaum Ordnungsproblem Java Basics - Anfänger-Themen 8
P Generischer Binärbaum (compareTo Frage) Java Basics - Anfänger-Themen 4
P einen binärbaum implementieren Java Basics - Anfänger-Themen 4
M Binärbaum - Problem bei Knoten anhängen / löschen Java Basics - Anfänger-Themen 5
B Binärbaum höhe herausfinden Java Basics - Anfänger-Themen 12
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
S Klassen Aufgabe: Binärbaum überprüfen Java Basics - Anfänger-Themen 16
S Binärbaum Java Basics - Anfänger-Themen 9
S Variable Parameterliste in Binärbaum Java Basics - Anfänger-Themen 2
N BinärBaum Hilfestellung Java Basics - Anfänger-Themen 8
S Binärbaum prüfen, ob sortiert oder unsortiert Java Basics - Anfänger-Themen 6
W Binärbaum zahlen addieren Java Basics - Anfänger-Themen 7
S Binärbaum - Klasse Knoten - Methode Suchen Java Basics - Anfänger-Themen 5
S Binärbaum Java Basics - Anfänger-Themen 7
I Binärbaum Java Basics - Anfänger-Themen 5
S Bitte um Hilfe beim unsortierten Binärbaum!! Java Basics - Anfänger-Themen 6
J Binärbaum getSize Java Basics - Anfänger-Themen 4
P Fragen zum Binärbaum Java Basics - Anfänger-Themen 3
S Binärbaum implementieren Java Basics - Anfänger-Themen 6
K Tiefe im Binärbaum Java Basics - Anfänger-Themen 2
G generischer binärbaum Java Basics - Anfänger-Themen 9
G Binärbaum und Wrapperklassen Java Basics - Anfänger-Themen 6
F Binärbaum codieren. Codeproblem! Java Basics - Anfänger-Themen 4
D rekursion im binärbaum Java Basics - Anfänger-Themen 11
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
B Binärbaum auf Vollständigkeit prüfen Java Basics - Anfänger-Themen 15
G Frage zur einfügen in einem Binärbaum Java Basics - Anfänger-Themen 21
G Binärbaum grafisch darstellen Java Basics - Anfänger-Themen 4
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Warum werden immer noch doppelte Zahlen ausgegeben ? Java Basics - Anfänger-Themen 13
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
S Ist das noch Insertionsort? Java Basics - Anfänger-Themen 3
O Warum will die MEthode noch am Ende einr eturn Java Basics - Anfänger-Themen 10
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
T Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Java Basics - Anfänger-Themen 6
CptK Vererbung Attributtyp in Super-Klasse noch nicht festlegen Java Basics - Anfänger-Themen 1
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
marcooooo einmal noch schnell hilfe bitte:/ Java Basics - Anfänger-Themen 2
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
J Zweck von Interfaces immer noch nicht klar Java Basics - Anfänger-Themen 3
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
P Cäsear verschlüsselung irgendwas passt noch nicht Java Basics - Anfänger-Themen 2
B java.util.Date noch zeitgemäß? Java Basics - Anfänger-Themen 6
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
S Noch eine Frage zur Rekursion... Java Basics - Anfänger-Themen 11
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
M Variable noch erstellen oder lieber so? Java Basics - Anfänger-Themen 1
V Bin eigentlich noch VOR dem Anfang .... Java Basics - Anfänger-Themen 9
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
A Wie kann ich mein Programm noch effizienter machen? Java Basics - Anfänger-Themen 1
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Noch immer Probleme mit exec Java Basics - Anfänger-Themen 15
H Geht dieser Code noch einfacher (try catch finally) Java Basics - Anfänger-Themen 7
P Geht dieser Code noch einfacher? Java Basics - Anfänger-Themen 16
I fertige xml-datein in eine noch aufzubauende xml-datei einfügen Java Basics - Anfänger-Themen 4
M Java von kopf bis Fuß noch zeitgemäß ? Java Basics - Anfänger-Themen 18
S noch ein ArrayIndexOutOfBoundsException Fehler Java Basics - Anfänger-Themen 2
Q queue.remove Element trotzdem noch vorhanden. Java Basics - Anfänger-Themen 10
S Musik einfügen funktioniert noch nicht Java Basics - Anfänger-Themen 6
P Noch zum Thema Arrays Java Basics - Anfänger-Themen 13
K Wofür wird heute noch die Stack Klasse in Java genutzt Java Basics - Anfänger-Themen 4
O Noch einmal Methoden Java Basics - Anfänger-Themen 9
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben