binärer Baum

Status
Nicht offen für weitere Antworten.

Turtle28

Mitglied
Ich baue einen binären Baum auf und möchte mit der delete()-Methode die Elemente wieder löschen.
das Löschen des rechten und linken Teilbaumes funktioniert auch, aber soblad ich die Wurzel löschen möchte wird der Baum neu erstellt, zb.
-füge ich die zahlen 2, 1, 3 ein
-möchte dann die Wurzel 2 löschen, hängt mein Programm die 1 an die 3 ran

Code:
public boolean delete(Comparable x)
	{
		TreeNode parent = root,
				 nodeR = root.getRight(),
				 nodeL = root.getLeft(),
				 node = null,
				 child = null,
				 tmp = null;
		
		if(x.compareTo(parent.getData())==0)
		{
			System.out.println("root"+parent);
			node = root;
		}
		else if(x.compareTo(parent.getData())<0)
		{
			System.out.println("nodeL" +nodeL);
			node = nodeL;
		}
		else
			node = nodeR;
		
		System.out.println("Wurzel "+root.getData());
		System.out.println("zu loeschendes Element "+x);
		
		//zu loeschenden Knoten suchen
		while(node != null)
		{
			int cmp = node.getData().compareTo(x);
			System.out.println("cmp "+cmp);
			
			if(cmp == 0)
				break;
			else
			{
				System.out.println("else");
				System.out.println("parent = "+node.getData());				
				parent = node;
				System.out.println(parent.getData() + " = node");
				//cmp>0 entweder node.getLeft() oder node.getRight()
				System.out.println("1:(cmp["+cmp+"]>0 ? node.getLeft()["+node.getLeft()+"]: node.getRight()["+node.getRight()+"]");
				node=(cmp>0 ? node.getLeft() : node.getRight());
				System.out.println("2:(cmp["+cmp+"]>0 ? node.getLeft()["+node.getLeft()+"]: node.getRight()["+node.getRight()+"]");
			}//else
		}//while
		
		if(node == null)
			//kein Knoten gefunden
			return false;
		
		//Fall 1:Knoten k ist ein Blatt, d.h. es muss nur der
		//Elternknoten bestimmt werden und der Verweis auf Knoten 
		//k muss entfernt werden (einfachste Fall)
		if(node.getLeft() == null && node.getRight() == null)
			child = null;
		
		//Fall 2:Knoten k ist ein Kindknoten, d.h. der Verweis
		//vom Elternknoten auf den Kindknoten von k umzulenken
		else if(node.getLeft() == null)
			child = node.getRight();
		else if(node.getRight() == null)
			child = node.getLeft();
		else
		{
			/*Fall 3:Knoten k ist ein inneren Knoten mit zwei 
			 *Kinderknoten, d.h. es muss der Knoten durch den
			 *am weitesten links stehenden Knoten des rechten
			 *Teilbaums ersetzt werden, da dieser in der 
			 *Sortierreihenfolge der nächste Knoten ist
			 */
			//minimales Element suchen
			child = node.getRight();
			tmp = node;
			
			while(child.getLeft()!= null)
			{
				tmp = child;
				child = child.getLeft();
			}//while
			child.setLeft(node.getLeft());
			
			if(tmp != node)
			{
				tmp.setLeft(child.getRight());
				child.setRight(tmp);
			}//if
		}//else
		
		if(parent.getLeft() == node)
			parent.setLeft(child);
		else
			parent.setRight(child);
		return true;
		
	}

sieht jemand meine Fehler?

Vielen dank schonmal im voraus!
 

mic_checker

Top Contributor
Will jetzt nicht für alle Fälle durchprobieren. Aber:

- Blätter löscht er erfolgreich oder?
- was ist mit inneren Knoten (exklusive Baum Wurzel) ?
- was ist mit der Baum-Wurzel? Da treten Probleme auf ?
 

Turtle28

Mitglied
im linken udn rechten Teilbaum löscht er alles richtig, egal ob Blatt oder Knoten
nur bei der wurzel, die löscht er gar nicht

2(wurzel)
1 3

nach dem löschen der Wurzel
2(wurzel)
1 3
1

hängt er den linken Teilbaum an den rechten Teilbaum.
 

mic_checker

Top Contributor
Machs doch so wie beim Löschen aus dem Binären Suchbaum:


Hol dir das Maximum aus dem linken Teilbaum , in deinem Fall 1, lösche das Blatt mit dem Wert 1 und setzen anschließend die Wurzel auf diesen Wert...also 1.

Theoretisch gehst du ja auch so (ähnlich) vor beim löschen von inneren Knoten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
P Binärer Baum mit Composite-Entwurfsmuster Java Basics - Anfänger-Themen 2
G Binärer Baum Java Basics - Anfänger-Themen 3
M Binärer Baum Tiefe Java Basics - Anfänger-Themen 14
R binärer Baum Java Basics - Anfänger-Themen 2
Cassy3 Binärer Suchbaum Knoten rauslöschen Java Basics - Anfänger-Themen 1
G Java Binärer Suchbaum Java Basics - Anfänger-Themen 1
G Binärer Suchbaum Knoten zählen Java Basics - Anfänger-Themen 1
L Binärer Suchbaum Java Basics - Anfänger-Themen 2
U Binärer Suchbaum delete Java Basics - Anfänger-Themen 1
S Binärer Suchbaum - Size als Variabel in innerer Klasse speichern Java Basics - Anfänger-Themen 2
H binärer String nach int convertieren Java Basics - Anfänger-Themen 3
E binärer suchbaum Java Basics - Anfänger-Themen 8
K Binärer Suchbaum Java Basics - Anfänger-Themen 3
D Binärer Suchbaum Java Basics - Anfänger-Themen 11
Q Binärer suchbaum Java Basics - Anfänger-Themen 2
T Binärer String zu Integer Java Basics - Anfänger-Themen 12
Y Binärer Suchbaum Java Basics - Anfänger-Themen 5
S binärer string in negativen int umwandeln Java Basics - Anfänger-Themen 4
C binärer Exponentenbereich bezogen auf das Dezimalsystem Java Basics - Anfänger-Themen 2
M Binärer Suchbaum Höhe Java Basics - Anfänger-Themen 6
G Hoffe jemand kann mir ein paar Tips geben:binärer Suchbaum Java Basics - Anfänger-Themen 3
E Binärer Suchbaum Java Basics - Anfänger-Themen 7
R binärer Suchbaum Java Basics - Anfänger-Themen 1
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
G AVL-Baum Java Basics - Anfänger-Themen 1
G Rot-Schwarz-Baum Java Basics - Anfänger-Themen 8
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Interface Baum visualisieren Java Basics - Anfänger-Themen 37
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
E Baum pfadweise durchlaufen Java Basics - Anfänger-Themen 11
O Naives links rechts einfügen in ADT Baum Java Basics - Anfänger-Themen 8
L Traversierungsverfahren Baum: LevelOrder Java Basics - Anfänger-Themen 17
L Rekursion im Baum Java Basics - Anfänger-Themen 9
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
D B-Baum einfügen und löschen Java Basics - Anfänger-Themen 2
D Werte AVL-Baum löschen Java Basics - Anfänger-Themen 2
M Binären Baum Kinder setzen Java Basics - Anfänger-Themen 12
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 4
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 0
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
R Baum erzeugen Java Basics - Anfänger-Themen 61
B Baum Traversierung Postorder Java Basics - Anfänger-Themen 6
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
A Voller Baum Java Basics - Anfänger-Themen 7
S n-ärer Baum Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
C kompletter baum Java Basics - Anfänger-Themen 2
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
M Baum Code kurze frage ... Java Basics - Anfänger-Themen 6
D Ein Objekt in einem Baum finden und ausgeben. Java Basics - Anfänger-Themen 4
K Rot-Schwarz-Baum min und max-Tiefe Java Basics - Anfänger-Themen 1
A min() Methode Baum Java Basics - Anfänger-Themen 1
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
Screen 2,4 Baum Frage Java Basics - Anfänger-Themen 6
T Rot-schwarz Baum Problem Java Basics - Anfänger-Themen 3
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
C 2-3 Baum Java Basics - Anfänger-Themen 6
H Baum Java Basics - Anfänger-Themen 4
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
L eigenen Baum schreiben Java Basics - Anfänger-Themen 5
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
T Array in einen Baum zu überführen Java Basics - Anfänger-Themen 3
S Das reinschreiben einer Klasse in den Baum Java Basics - Anfänger-Themen 6
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
A Baum mit geometricfigur Werte Java Basics - Anfänger-Themen 6
D Datentypen Einfügen im RotSchwarz Baum Java Basics - Anfänger-Themen 2
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
G List als Rückgabewert einer rekursiven Methode (Baum) Java Basics - Anfänger-Themen 3
I Baum graphisch darstellen Java Basics - Anfänger-Themen 2
L Baum Swing AVL Java Basics - Anfänger-Themen 4
Binary.Coder 2-3-4 Baum vs. (2,4) Baum Java Basics - Anfänger-Themen 2
ModellbahnerTT Ab-Baum Applet Java Basics - Anfänger-Themen 3
P Baum-Menü in Java Java Basics - Anfänger-Themen 5
H Baum Java Basics - Anfänger-Themen 11
G AVL Baum Java Basics - Anfänger-Themen 20
J Baum spiegeln Java Basics - Anfänger-Themen 7
N 2-3 Baum, Einfügen Java Basics - Anfänger-Themen 5
G Rekursion mit Return - Baum durchlaufen Java Basics - Anfänger-Themen 4
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
V Baum mit log n Aufwand für Einfügen und Löschen und. Java Basics - Anfänger-Themen 5
H Tiefensuche im binären Baum Java Basics - Anfänger-Themen 2
P Problem mit Darstellung im Baum Java Basics - Anfänger-Themen 4
G universeller baum Java Basics - Anfänger-Themen 13
G Baum testen Java Basics - Anfänger-Themen 20
B Array To Baum Java Basics - Anfänger-Themen 2
B Baum to Array Java Basics - Anfänger-Themen 17
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
L Binären Baum speichern Java Basics - Anfänger-Themen 6
R Pythagoras-Baum Java Basics - Anfänger-Themen 5
W Baum durchlaufen Java Basics - Anfänger-Themen 3
G eine Knoten aus einem Baum löschen. [SOLVED] Java Basics - Anfänger-Themen 7
P allg. Baum aus Liste Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben