BinärTree, Knoten löschen

Laren

Bekanntes Mitglied
Hi,

Ich hab hier einen Binearbaum, der rekursiv läuft, aber ich hänge gerade etwas an der Löschmethode, ich weis einfach nicht, wie ich dies realiesieren könnte???:L
Muss ich den Baum einfach immer wieder neu zeichnen ohne den Knoten?

Viele Grüße

Java:
/**
 * Ein sortierter Binaerbaum
 */
package ueb14;

public class BinaerTree {

	private Knoten root;
	private StringComperator comperator = new StringComperator();
	private int anzahlKnoten;

	/**
	 * Hinzuefuegen von Objekten
	 * @param uebergabeObjekt
	 */
	public void add(Object uebergabeObjekt) {
		Knoten knoten = new Knoten(null, null, uebergabeObjekt);
		if (root == null)
		{
			root = knoten;
			anzahlKnoten++;
		}
			else
			addAbBestimmtenKnoten(root, knoten);

	}

	public void addAbBestimmtenKnoten(Knoten ausgewaehlterKnoten,Knoten uebergabeKnoten) {
		
		String ausgewaehlterKnotenString = (ausgewaehlterKnoten.toString());
		String uebergabeKnotenString = (uebergabeKnoten.toString());

		if (comperator.compare(ausgewaehlterKnotenString, uebergabeKnotenString) > 0)

		{
			if (ausgewaehlterKnoten.hatLinkenSohn()) {
				addAbBestimmtenKnoten(ausgewaehlterKnoten.getLinkerSohn(),
						uebergabeKnoten);
			}
			if (!ausgewaehlterKnoten.hatLinkenSohn()) {
				ausgewaehlterKnoten.setLinkerSohn(uebergabeKnoten);
				anzahlKnoten++;

			}
		}
		if (comperator.compare(ausgewaehlterKnotenString, uebergabeKnotenString) < 0)

		{
			if (ausgewaehlterKnoten.hatRechtenSohn()) {
				addAbBestimmtenKnoten(ausgewaehlterKnoten.getRechterSohn(),
						uebergabeKnoten);
			}
			if (!ausgewaehlterKnoten.hatRechtenSohn()) {
				ausgewaehlterKnoten.setRechterSohn(uebergabeKnoten);
				anzahlKnoten++;
			}

		}
		

	}

	public String toString() {
		if (root != null) {
			return toString(root);
		} else {
			return "<leerer Baum>";
		}
	}

	private String toString(Knoten knoten) {
		
		String ausgabe = "";

		if (knoten.getLinkerSohn() != null) {
			ausgabe = ausgabe+ toString(knoten.getLinkerSohn());
		}
		ausgabe += knoten.getInhalt() + "\n";
		if (knoten.getRechterSohn() != null) {
			ausgabe = ausgabe+ toString(knoten.getRechterSohn());
		}

		return ausgabe;
	}

	/**
	 * @return the anzahlKnoten
	 */
	public int getAnzahlKnoten() {
		return anzahlKnoten;
	}

	/**
	 * @return the root
	 */
	public Knoten getRoot() {
		return root;
	}
	
	

}
 

Laren

Bekanntes Mitglied
Was hast du denn bis jetzt?

Ich kann nur den Baum mit Knoten füllen (und total leer machen;)), aber ich hänge bei den einzelnen Knoten löschen.

In dem Code steht auch nix von Zeichnen was meinst du damit?

Das ich es irgentwie schaffe, das der Baum neu gezeichnet(so nannten wir es auf der Uni:oops:, also neu nochmal neu erstellt wird) , nur ohne den alten Knoten.

Ich weis echt nicht, wie ich es anstellen soll:(
 

XHelp

Top Contributor
Willst du einen einzigen Knoten löschen, so dass der dranhängende Teilbaum "nachrutscht" oder soll der Teilbaum mitgelöscht werden?
Beim 2. Fall sollte es wohl reichen den entsprechenden Node auf null zu setzen, im 1. Fall ist es wohl am einfachsten den Node auf null zu setzen und alles was noch dran hängt erneut zum Baum hinzuzufügen.
 

Laren

Bekanntes Mitglied
Habe es jetzt so realiesiert, dass ich einfach die Referenzen der Knoten änderer, das klappt aber noch nicht so gut, was mache ich falsch?

Java:
private void del(Knoten knoten) {

		// Keine Soehne, also Blatt
		if (!knoten.hatLinkenSohn() && !knoten.hatRechtenSohn()) {
			if (knoten.getVater().getLinkerSohn() == knoten) {
				knoten.getVater().setLinkerSohn(null);
				knoten = null;
			} else if (knoten.getVater().getRechterSohn() == knoten) {
				knoten.getVater().setRechterSohn(null);
				knoten = null;
			}
		}
		// nur linker Sohn
		else if (knoten.hatLinkenSohn() && !knoten.hatRechtenSohn()) {
			if (knoten.getVater().getLinkerSohn() == knoten) {
				knoten.getVater().setLinkerSohn(knoten.getLinkerSohn());
				knoten = null;
			} else if (knoten.getVater().getRechterSohn() == knoten) {
				knoten.getVater().setRechterSohn(knoten.getRechterSohn());
				knoten = null;
			}
		}
		// nur rechter Sohn
		else if (!knoten.hatLinkenSohn() && knoten.hatRechtenSohn()) {
			if (knoten.getVater().getLinkerSohn() == knoten) {
				knoten.getVater().setLinkerSohn(knoten.getLinkerSohn());
				knoten = null;
			}
			if (knoten.getVater().getRechterSohn() == knoten) {
				knoten.getVater().setRechterSohn(knoten.getRechterSohn());
				knoten = null;
			}
		}
		// rechter und linker Sohn
		else if (knoten.hatLinkenSohn() && knoten.hatRechtenSohn()) {
			if (knoten.getVater().getLinkerSohn() == knoten) {
				knoten.getVater().setLinkerSohn(knoten.getLinkerSohn());
				knoten.getVater().getLinkerSohn().setRechterSohn(knoten.getRechterSohn());
				knoten = null;
			}
			if (knoten.getVater().getRechterSohn() == knoten) {
				knoten.getVater().setRechterSohn(knoten.getRechterSohn());
				knoten.getVater().getRechterSohn().setLinkerSohn(knoten.getLinkerSohn());
				knoten = null;
			}
		}
	}
 

XHelp

Top Contributor
Was heißt denn "nicht so gut"??
Da fehlt aber mindestens eine Schleife, die den gewünschten Knoten in dem Baum sucht und bei dem Vorgänger davon die Referenz ändert.
 

Laren

Bekanntes Mitglied
sorry, das hab ich ganz vergessen;), oben drüber ist natürlich noch diese Methode:

Java:
	public void del(Object uebergabe) {
		Knoten knoten = new Knoten(null, null, null, uebergabe);
		this.del(findKnoten(knoten));
	}

das findKnoten usw funktioniert alles, es geht mir jetzt nur darum, wie ich die Referenzen legen muss, wenn ein Knoten 1 oder 2 Kinder hat. Die Blätter zu löschen funktioniert.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
Cassy3 Binärer Suchbaum Knoten rauslöschen Java Basics - Anfänger-Themen 1
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
S Binärbäume knoten zählen Java Basics - Anfänger-Themen 16
T Collections Methode (Knoten hinzufügen) für Graphen Java Basics - Anfänger-Themen 32
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
G Binärer Suchbaum Knoten zählen Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
E Knoten eines Baumes unter Bedinung zählen Java Basics - Anfänger-Themen 2
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
L Graphen: Anzahl Knoten // Knoten in Array speichern Java Basics - Anfänger-Themen 4
I Erste Schritte Referenz zum Knoten davor, in einer Liste 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
S Baumstruktur: tiefsten Knoten finden Java Basics - Anfänger-Themen 3
B Methoden BinärBaum als String Knoten löschen Java Basics - Anfänger-Themen 5
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
T Datentypen Knoten Großvater finden? Java Basics - Anfänger-Themen 12
S Methoden Abtrennen ab einem gegebenen Knoten eines Binärbaums Java Basics - Anfänger-Themen 4
M Binärbaum - Problem bei Knoten anhängen / löschen Java Basics - Anfänger-Themen 5
B JTree knoten wird nicht übernommen Java Basics - Anfänger-Themen 4
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
T gebe mir den ersten eltern knoten Java Basics - Anfänger-Themen 3
K verkettete Listen - Klasse Knoten Java Basics - Anfänger-Themen 19
L LinkedList vorgänger Knoten zurück geben Java Basics - Anfänger-Themen 4
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
D An bestimmten Knoten einer Liste zugreifen Java Basics - Anfänger-Themen 4
S Binärbaum - Klasse Knoten - Methode Suchen Java Basics - Anfänger-Themen 5
M Nachbar von Knoten bestimmen Java Basics - Anfänger-Themen 8
0x7F800000 zwei adjazenzlisten für jeden knoten eines graphen sinnvoll? Java Basics - Anfänger-Themen 17
C Bäume in Java. Knoten in Array speichern Java Basics - Anfänger-Themen 3
G eine Knoten aus einem Baum löschen. [SOLVED] Java Basics - Anfänger-Themen 7
F JTree-Knoten (DefaultMutableTreeNode) formatieren ? Java Basics - Anfänger-Themen 3
Y JTree: ein Knoten als Objekt Java Basics - Anfänger-Themen 2
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
V JSON-Objs aus JSON-Obj filtern und löschen (Manipulation ohne Kenntnis der vollst. Struktur) Java Basics - Anfänger-Themen 12
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
K Wie kann ich "enter" von der Console in Eclipse löschen? Java Basics - Anfänger-Themen 2
E Objekte löschen Java Basics - Anfänger-Themen 9
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
berserkerdq2 An selbst ersteller txt Datei immer Text dranhängen, ohne den vorherign Text zu löschen Java Basics - Anfänger-Themen 8
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
J Zelleninhalt einer Jtable löschen Java Basics - Anfänger-Themen 2
G Bitte meinen Account löschen Java Basics - Anfänger-Themen 1
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
W Beitrag löschen Java Basics - Anfänger-Themen 1
O Doppelt verkette Liste Element löschen Java Basics - Anfänger-Themen 15
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
M Abfrage j/n und Bildschirm löschen Java Basics - Anfänger-Themen 3
J JTable Spalteninhalt löschen Java Basics - Anfänger-Themen 1
L Methoden ArrayList Werte hinzufügen und löschen Java Basics - Anfänger-Themen 32
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
R Löschen und ausgeben eines Teilbaums Java Basics - Anfänger-Themen 3
V_Fynn03 Beliebiges Element in einer Liste löschen (Java)(Lineare Datenstrukturen) Java Basics - Anfänger-Themen 9
V_Fynn03 Lineare Datenstrukturen Element löschen? Java Basics - Anfänger-Themen 2
S Wann buffer löschen? Java Basics - Anfänger-Themen 5
S Windows printerqueue mit Java löschen Java Basics - Anfänger-Themen 3
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
M Image löschen Java Basics - Anfänger-Themen 2
H Objekt aus einem Array löschen Java Basics - Anfänger-Themen 1
O Element aus Array löschen Java Basics - Anfänger-Themen 5
steven789hjk543 Kann ich manche Versionen des jdk löschen? Java Basics - Anfänger-Themen 6
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
W Map doppelte Values löschen Java Basics - Anfänger-Themen 3
T Löschen in doppelt verketteter Liste Java Basics - Anfänger-Themen 1
A Größten Eintrag aus Binärbaum löschen Java Basics - Anfänger-Themen 4
J am Anfang eines String ein Leerzeichen löschen Java Basics - Anfänger-Themen 6
Z Vocale löschen Java Basics - Anfänger-Themen 3
D B-Baum einfügen und löschen Java Basics - Anfänger-Themen 2
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
D Werte AVL-Baum löschen Java Basics - Anfänger-Themen 2
M Ordner mit Inhalt löschen Java Basics - Anfänger-Themen 7
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
R Datei löschen Java Basics - Anfänger-Themen 3
V Durch Methode Objekt löschen Java Basics - Anfänger-Themen 2
P Verbindung von Zwei Kreisen löschen ! Java Basics - Anfänger-Themen 6
D JTable Zeilen löschen Java Basics - Anfänger-Themen 5
I Hilfe beim löschen von Buchstaben. Java Basics - Anfänger-Themen 1
I Hilfe beim löschen schon Buchstaben. Java Basics - Anfänger-Themen 4
J Kann eine .jar sich selber Löschen? Java Basics - Anfänger-Themen 5
D Projekte + Datum + löschen Java Basics - Anfänger-Themen 11
B Methoden Element aus einem Array löschen, Rest nach vorne verschieben? Java Basics - Anfänger-Themen 4
K Element in ArrayList löschen ohne Index zu verschieben Java Basics - Anfänger-Themen 2
O Hilfestellellung bei Rekursivem Löschen Java Basics - Anfänger-Themen 11
N Generischer Binärbaum - löschen Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
G zeichen einer Zeile löschen Java Basics - Anfänger-Themen 4
R [Erledigt]Fehler beim löschen von einzelnen Buchstaben aus StringBuilder Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben