Binärbaum kopieren

sly-boy

Mitglied
Hi zusammen!

Vorab, ich habe nicht so viel Ahnung von Java.
Ich habe eine Aufgabenstellung, die ich alleine leider nicht lösen kann und hoffe, dass mir einer helfen kann.

Aufgabe:
Erweitern Sie die Klasse MyTreeMap um eine Operation
public MyTreeMap getPerfectlyBalancedCopy(),

mit der zu einem gegebenen binären Suchbaum eine Kopie erstellt wird, die bestmöglich
balanciert ist. Das soll genau dann gelten, wenn die Niveaus aller Blattknoten eines Baumes
sich maximal um 1 unterscheiden.

Erstellen Sie außerdem ein Testprogramm Test.java, in dessen main-Operation Sie
zunächst einen binären Suchbaum (MyTreeMap) mit mindestens 20 Knoten aufbauen und
diesen dann mittels getPerfectlyBalancedCopy() in einen bestmöglich ausbalancierten
Baum überführen und anschließend mittels inorderPrint() ausgeben lassen.

Hier der Code der vorgegeben ist:
Java:
/**
 * Implementierung eines bin‰ren Suchbaums
 *
 * Beachte: 
 * Der Suchbaum ist kein ausgeglichener Baum.
 * Er kann durch Einf¸ge- und Lˆschoperationen zu einer
 * linearen Liste entarten.
 *
 * Die gespeicherten Objektreferenzen f¸r Werte d¸rfen 
 * nicht gleich null sein.
 *
 */
public class MyTreeMap
{
	/** 
	 * Innere Klasse f¸r die Knoten des bin‰ren Sucbaumes
	 */
	class Node 
	{
		// Attribute 
		Comparable key; // Verweis auf Schl¸ssel-Objekt
		Object value;   // Verweis auf Wert-Objekt
		Node left;      // Verweis auf linken Kindknoten
		Node right;     // Verweis auf rechten Kindknoten
		
		// Konstruktor
		Node(Comparable key, Object value)
		{
	    	this.key = key;
	    	this.value = value;
	    	this.left = null;
	    	this.right = null;
	    }
    }

	// Attribute (Klasse MyTreeMap)
	private Node root;   // Verweis auf Wurzelknoten des Bin‰rbaumes
	private int size;    // Anzahl der Knoten des Bin‰rbaumes
	
	// Konstruktor (Klasse MyTreeMap)
	/**
	 * Erzeugung eines leeren Bin‰rbaums
	 */
	public MyTreeMap()
	{
		this.root = null;
		this.size = 0;
	}

	// Operationen (Klasse MyTreeMap)
	/**
	 * Bestimmung der Anzahl der Knoten im Bin‰rbaum
	 */
	public int size()
	{
		return this.size;
	}

	/*
	 * Bestimmung eines Knotens, der einen vorgegebenen Schl¸ssel enth‰lt
	 * mit Hilfe eines rekursiven Algorithmus
	 * Die Operation setzt voraus, dass key ungleich null ist. 
	 */	
	private Node getNodeRec(Comparable key, Node tree) 
	{
		Node result;
		
		if (tree==null)			// Baum ist leer
			result = null;
		else
		{
			int cmp = key.compareTo(tree.key);
			if (cmp==0)			// Knoten ist gefunden
			    result = tree;
			else if(cmp<0)      // Suchen im linken Teilbaum
				result = getNodeRec(key, tree.left);
			else			    // Suchen im rechten Teilbaum
				result = getNodeRec(key, tree.right);
		}
		
		return result;
	}

	/*
	 * Bestimmung eines Knotens, der einen vorgegebenen Schl¸ssel enth‰lt
	 * mit Hilfe eines iterativen Algorithmus
	 * Die Operation setzt voraus, dass key ungleich null ist. 
	 */	
	private Node getNodeIt(Comparable key, Node tree) 
	{
		Node result;
		
		result = null;


		// Hier Lˆsung einf¸gen

		
		return result;
	}
 
	/**
	 * Bestimmung des Wertes zu einem vorgegebenen Schl¸ssel 
	 */	
	Object get(Comparable key) 
	{
		Object result = null;
		
		if (key!=null)
		{
			Node p = getNodeRec(key, this.root);
			if (p!=null)
				result = p.value;
		}

   		return result;
	}

	/**
	 * ‹berpr¸fung, ob ein zu o inhaltsgleiches Objekt als Werte-Objekt
	 * enthalten ist
	 */	
	boolean containsValue(Object o) 
	{
		return containsValueRec(o, this.root);
	}

	private boolean containsValueRec(Object o, Node tree) 
	{
		boolean result = false;

		// Hier Lˆsung einf¸gen
		
   		return result;
	}

	
	/*
	 * Rekursives Verfahren zum Einf¸gen eines Paares (key,value) 
	 * in den Bin‰rbaum mit dem Wurzelknoten tree.
	 * Ist der Schl¸ssel key schon vorhanden, wird der alte
	 * Wert durch den Wert value ersetzt.
	 * Als Ergebnis wir ein Baum zur¸ckgeliefert, der das 
	 * Paar (key, value) enth‰lt.
	 */	
	private Node insertNode(Comparable key, Object value, Node tree) 
	{
		if (tree==null)
		{						// Neuen Knoten erzeugen
			tree = new Node(key, value);
			this.size++;
		}
		else
		{
			int cmp = key.compareTo(tree.key);
			if (cmp==0)
			{
				// Alter Wert wir durch neuen Wert ersetzt
				tree.value = value;
			}
			else if(cmp<0)      // Einf¸gen im linken Teilbaum
				tree.left = insertNode(key, value, tree.left);
			else			    // Einf¸gen im rechten Teilbaum
				tree.right = insertNode(key, value, tree.right);
		}
		
		return tree;
	}

	/**
	 * Einf¸gen eines Paares (key,value) in den Bin‰rbaum
	 * Ist der Schl¸ssel key schon vorhanden, wird der alte
	 * Wert durch den Wert value ersetzt.
	 */
	void put(Comparable key, Object value)
	{
		if (key!=null && value!=null)
			this.root = insertNode(key, value, this.root);
	}	
	
	/*
	 * Bestimmung des Elternknotens des symmetrischen Nachfolgers
	 * des Knotens tree
	 *
	 * Der symmetrische Nachfolger eines Knotens, ist der Knoten
	 * mit dem kleinsten Schl¸ssel, der grˆ?er als der Schl¸ssel
	 * des Knotens tree ist.
	 * Dieser ist der am weitesten links stehende Knoten im rechten
	 * Teilbaum des Knotens tree.
	 */
	private Node parentSymSucc(Node tree)
	{
		Node result;
		
		result = tree;
		if (result.right.left!=null)
		{
			result = result.right;
			while (result.left.left!=null)
				result = result.left;
		}
		
		return result;
	}

	/*
	 * Rekursives Verfahren zum Entfernen eines Knotens zu einem
	 * vorgegebenen Schl¸ssel im Bin‰rbaum mit dem Wurzelknoten tree.
	 * Als Ergebnis wir ein Baum zur¸ckgeliefert, der den Schl¸ssel 
	 * key nicht mehr enth‰lt.
	 */				
	private Node removeNode(Comparable key, Node tree)
	{
		if (tree!=null)
		{
			int cmp = key.compareTo(tree.key);
			if (cmp<0)		// Entfernen im linken Teilbaum
				tree.left = removeNode(key, tree.left);
			else if (cmp>0)	// Entfernen im rechten Teilbaum
				tree.right = removeNode(key, tree.right);
			else
			{
				// zu entfernender Knoten gefunden
				this.size--;
				if (tree.left==null)
					tree = tree.right;	// Fall 1: siehe Skript
				else if (tree.right==null)
					tree = tree.left;	// Fall 2: siehe Skript
				else
				{
					// Knoten besitzt zwei Kindknoten
					Node p = parentSymSucc(tree);
					if (p==tree)		// Fall 3: siehe Skript
					{
						tree.key = p.right.key;
						tree.value = p.right.value;
						p.right = p.right.right;
					}					// Fall 4: siehe Skript
					else
					{
						tree.key = p.left.key;
						tree.value = p.left.value;
						p.left = p.left.right;
					}
				}
			}			
		}
		
		return tree;
	}
	
	/**
	 * Entfernen eines Eintrags im Bin‰rbaum zu einem vorgegebenen Schl¸ssel
	 */
	void remove(Comparable key)
	{
		if (key!=null)
			this.root = removeNode(key, this.root);
	}
	
	/*
	 * Rekursives Verfahren zur Ausgabe der Paare (Schl¸ssel,Wert)
	 * sortiert nach aufsteigender Reihenfolge der Schl¸sseln
	 * durch einen Inorder-Durchlauf durch den Bin‰rbaum
	 */
	private void inorderPrint(Node tree)
	{
		if (tree!=null)
		{
			inorderPrint(tree.left);
			System.out.println("("+tree.key+","+tree.value+")");
			inorderPrint(tree.right);
	    }
	} 
	
	/** 
     * Ausgabe der Paare (Schl¸ssel,Wert) sortiert nach aufsteigender
     * Reihenfolge der Schl¸ssel
     */ 	 
	void print()
	{
		System.out.println("Liste der Eintr‰ge");
		System.out.println("------------------");
		inorderPrint(this.root);
		System.out.println();
	}
 }
 

sly-boy

Mitglied
Ganz ehrlich, ich kann die Aufgabe nicht lösen, weil ich so gut wie keine Ahnung habe...

Ich muss einen Baum mit 20 Knoten bauen, den kopieren und dann ausgeben.

Ich finde auch leider nicht viel in den Büchern die ich habe ("Java ist auch eine Insel" etc.)
 
Zuletzt bearbeitet:
Ä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
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
T Binärbaum - noch ein "klitzekleiner Fehler" Java Basics - Anfänger-Themen 4
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
G variable kopieren bzw. woanders benutzen Java Basics - Anfänger-Themen 6
B Objekt kopieren und sämtliche Referenzen von diesem Objekt? Java Basics - Anfänger-Themen 3
S Objekt aus Arraylist in andere Arraylist kopieren? Java Basics - Anfänger-Themen 2
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
M ArrayList - Objekt kopieren und ändern Java Basics - Anfänger-Themen 11
A BinaryTree komplett kopieren Java Basics - Anfänger-Themen 7
M Arrays in Funktion Kopieren und Bearbeiten Java Basics - Anfänger-Themen 4
J Zweidimensionales array kopieren und in eindimensionales überführen Java Basics - Anfänger-Themen 304
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
S Input/Output Vom Netzwerk kopieren Java Basics - Anfänger-Themen 6
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
C Objekt (tief)-kopieren Java Basics - Anfänger-Themen 2
M Input/Output Word File Kopieren Java Basics - Anfänger-Themen 12
TomatenBrot447 Wie kann man ein Objekt kopieren? Java Basics - Anfänger-Themen 11
W Datentypen Kopieren von Arrays Java Basics - Anfänger-Themen 4
M Input/Output Datei in Laufzeit-JAR kopieren Java Basics - Anfänger-Themen 6
D Input/Output Ordner aus .Jar in das Verzeichnis der .Jar kopieren Java Basics - Anfänger-Themen 1
B Dateien aus dem "resource" - Folder kopieren in Verzeichnis Java Basics - Anfänger-Themen 9
B Kopieren von Dateien mit Adminberechtigungen Java Basics - Anfänger-Themen 14
D 2 D Arrays kopieren Java Basics - Anfänger-Themen 3
S double[x] , double[y] zu Point[] points kopieren? Java Basics - Anfänger-Themen 15
C Array kopieren und nur bestimmte Werte speichern Java Basics - Anfänger-Themen 6
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
C Datei identisch Kopieren Java Basics - Anfänger-Themen 3
E Textdatei kopieren funktioniert nicht Java Basics - Anfänger-Themen 12
L Source Code in Editor kopieren Java Basics - Anfänger-Themen 5
S ods-Dateo kopieren Java Basics - Anfänger-Themen 12
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
J Klassen Fehler Datei kopieren - was mache ich falsch Java Basics - Anfänger-Themen 19
M Kopieren einer .wav Datei Java Basics - Anfänger-Themen 6
J Dienst zum Text kopieren und Variable hochzählen Java Basics - Anfänger-Themen 7
V Zwei Array in einem kopieren Java Basics - Anfänger-Themen 3
T TreeSet sortiert in ein anderes kopieren Java Basics - Anfänger-Themen 2
B Methode zum kopieren von Arrays Java Basics - Anfänger-Themen 9
C Referenz auf ein Objekt kopieren! Java Basics - Anfänger-Themen 2
J Text kopieren an bestimmter Stelle Java Basics - Anfänger-Themen 8
T ArrayList kopieren Java Basics - Anfänger-Themen 10
M Java-Datei in Ordner Kopieren Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben