Implementierung eines AVT-Baums

Lukases2

Aktives Mitglied
Hallo,

wie kann ich bei nachfolgendem Code die Wurzel des Baums festlegen? Ich bekomme immer die Fehlermeldung "Tree has no root".

Java:
import java.util.Random;

public class AvlTree<Key extends Comparable<Key>, Value> {
	// Repräsentiert einen Knoten des Baums
	private static class Node<Key extends Comparable<Key>, Value> {
		private final Key key;
		private Value value;
		
		private Node<Key, Value> parent;
		private Node<Key, Value> right;
		private Node<Key, Value> left;
		
		// Tiefe(rechter Teilbaum) - Tiefe(linker Teilbaum)
		private int balance;

		public Node(Key key) {
			this.key = key;
		}

		public void print() {
			print("");
		}
		
		private void print(String prefix) {
			System.out.println(prefix + key + " -> " + value + ", balance: " + balance);
			
			if(left == null && right == null)
				return;

			if(left != null) {
				left.print(prefix + "    ");
			}else{
				System.out.println(prefix + "    (no left child)");
			}
			if(right != null) {
				right.print(prefix + "    ");
			}else{
				System.out.println(prefix + "    (no right child)");
			}
		}
	}
	
	// Wurzel des Baums
	private Node<Key, Value> root;
	
	// Fügt ein Element in der Baum ein, bzw. ändert seinen Wert,
	// falls das Element bereits vorhanden ist.
	// Gibt true zurück, wenn ein neues Element eingefügt wurde,
	// ansonsten wird falsche zurückgegeben.
	public boolean addOrSet(Key key, Value value) {
		// Bitte implementieren Sie diese Methode!
		return true;
	}
	
	// Gibt den Wert, der zu einem bestimmten Schlüssel gehört, zurück.
	// Gibt null zurück, falls der Schlüssel nicht existiert.
	public Value get(Key key) {
		System.out.print(key.hashCode()+ " ");
		// Bitte implementieren Sie diese Methode!
		return null;
	}
	
	// Rechtsrotation (n bezeichnet das gegebene Node):
	//   w                 w
	//   |                 |
	//   u                 n
	//  / \      -->      / \
	// x   n             u   y
	//    / \           / \
	//   v   y         x   v
	// Man beachte, dass x und y unverändert gelassen werden
	private void rotateLeft(Node<Key, Value> n) {
		// Bitte implementieren Sie diese Methode!
	}

	// Rechtsrotation (n bezeichnet das gegebene Node):
	//     w             w
	//     |             |
	//     u             n
	//    / \    -->    / \
	//   n   x         y   u
	//  / \               / \
	// y   v             v   x
	// Man beachte, dass x und y unverändert gelassen werden
	private void rotateRight(Node<Key, Value> n) {
		// Bitte implementieren Sie diese Methode!
	}

	// Wird aufgerufen, um die Balance-Invariante wiederherzustellen,
	// nachdem die Tiefe von n sich (um 1) erhöht hat.
	// Vorbedingung: Der Teilbaum mit Wurzel n ist ein AVL-Baum
	//    und entweder n.balance != 0 oder n ist ein Blatt
	// Nachbedingung: Der Teilbaum mit Wurzel u = n.parent ist ein AVL-Baum
	private void fixAfterDepthIncrement(Node<Key, Value> n) {
		// Bitte implementieren Sie diese Methode!
	}

	private void checkIntegrity() {
		if(root != null)
			checkIntegrity(root);
	}

	// Überprüft, ob die Invarianten des AVL-Baums eingehalten werden
	// Gibt die Tiefe des Baums zurück
	private int checkIntegrity(Node<Key, Value> node) {
		int left_depth = 0;
		int right_depth = 0;

		if(node.left != null) {
			if(node.left.key.compareTo(node.key) > 0)
				throw new RuntimeException("Broken search tree invariant");
			left_depth = checkIntegrity(node.left);
		}
		
		if(node.right != null) {
			if(node.right.key.compareTo(node.key) < 0)
				throw new RuntimeException("Broken search tree invariant");
			right_depth = checkIntegrity(node.right);
		}

		if(node.balance != right_depth - left_depth)
			throw new RuntimeException("Broken balance invariant");
		
		return 1 + Math.max(left_depth, right_depth);
	}

	public static void main(String[] args) {
		String input = "The quick brown fox jumps over the lazy dog";

		AvlTree<Character, Integer> occurrences = new AvlTree<Character, Integer>();
		for(int i = 0; i < input.length(); i++) {
			Integer count = occurrences.get(input.charAt(i));
			
			if(count == null) {
				if(!occurrences.addOrSet(input.charAt(i), 1))
					throw new RuntimeException("addOrSet() returned false even though '"
							+ input.charAt(i) + "' is not part of the tree");
			}else{
				if(occurrences.addOrSet(input.charAt(i), count + 1))
					throw new RuntimeException("addOrSet() returned true even though '"
							+ input.charAt(i) + "' is already part of the tree");
			}
		}

		if(occurrences.root == null)
			throw new RuntimeException("Tree has no root");

		System.out.println("Tree counting the occurrences of characters in '" + input + "':");
		occurrences.root.print();
		
		occurrences.checkIntegrity();
		System.out.println("This is a valid AVL-tree!");
		
		if(occurrences.get(' ') != 8)
			throw new RuntimeException("But ' ' occurs 8 times");
		if(occurrences.get('o') != 4)
			throw new RuntimeException("But 'o' occurs 4 times!");
		if(occurrences.get('i') != 1)
			throw new RuntimeException("But 'i' occurs exactly once!");

	}
}
 

InfectedBytes

Top Contributor
Das Problem kommt, weil du die Methoden nicht implementiert hast.
Die ganzen Methoden machen bisher rein gar nichts, daher ist logischerweise auch die Wurzel null.
Java:
	// Fügt ein Element in der Baum ein, bzw. ändert seinen Wert,
	// falls das Element bereits vorhanden ist.
	// Gibt true zurück, wenn ein neues Element eingefügt wurde,
	// ansonsten wird falsche zurückgegeben.
	public boolean addOrSet(Key key, Value value) {
		// Bitte implementieren Sie diese Methode!
		return true;
	}
Z.b. sollte die addOrSet Methode die Wurzel setzen, falls es bisher noch keine Wurzel gibt und ansonsten eben den Wert korrekt einfügen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
B Elegantere Lösung bei der Implementierung eines Interfaces Allgemeine Java-Themen 2
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
L rotateLeft implementierung Allgemeine Java-Themen 2
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
S Mutable objects und Implementierung von ChangeEvents Allgemeine Java-Themen 5
W Queue Implementierung Allgemeine Java-Themen 6
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
F Implementierung von Teilprogrammen [Java|Python] Allgemeine Java-Themen 7
I TimSort - Sortieralgorithmus - Erklärung und Pseudocode - Implementierung Allgemeine Java-Themen 2
ruutaiokwu burstsort-implementierung in java? Allgemeine Java-Themen 2
D Implementierung einer Mehrsprachigkeit, wichtig ? Allgemeine Java-Themen 5
D Implementierung einer Rechteverwaltung Allgemeine Java-Themen 2
R "Countdown" Implementierung Allgemeine Java-Themen 5
K A*-Implementierung flexibler machen Allgemeine Java-Themen 4
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S BlueJ Cäsar-Implementierung Allgemeine Java-Themen 6
S Implementierung Programmneustart Allgemeine Java-Themen 10
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
S Implementierung einer PluginArchitektur Allgemeine Java-Themen 5
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
V Wie finde ich die konkrete Implementierung? Allgemeine Java-Themen 8
G Implementierung vom AKS-Test Allgemeine Java-Themen 11
R software implementierung Allgemeine Java-Themen 3
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
K Design / Implementierung Allgemeine Java-Themen 5
B jre browser implementierung ? Allgemeine Java-Themen 4
G Klasse Queue Implementierung in Java Allgemeine Java-Themen 4
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
T Rotationswinkel eines Bildes bestimmen Allgemeine Java-Themen 4
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Encera Größe eines Objektes in Byte berechnen Allgemeine Java-Themen 2
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
M Array Rang eines Elements Allgemeine Java-Themen 4
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
H Auslesen eines (LDAP-)Attributs in Active Directory Allgemeine Java-Themen 2
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
H Textposition eines gedrehten Textes verschieben Allgemeine Java-Themen 8
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
S Übergabe eines Sortierkriteriums für ein Artikel Array mittels BiPredicate<Artikel, Artikel> Allgemeine Java-Themen 13
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
LimDul Direktes return eines Array geht nicht Allgemeine Java-Themen 20
S Mittelwert anhand eines Stream berechnen Allgemeine Java-Themen 5
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
R Zeilen eines 2d Arrays abwechselnd links und rechts mit Nullen auffüllen Allgemeine Java-Themen 14
Zrebna Alternative Darstellung eines Codesnippets Allgemeine Java-Themen 33
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
bueseb84 Wget mit Wildcards - oder wie lädt man bei JFrog die letzte Version eines Artifacts herunter Allgemeine Java-Themen 3
N Erkennen eines Programs Allgemeine Java-Themen 2
N Pausieren eines Programmes Allgemeine Java-Themen 4
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
A Fehler beim Öffnen eines Projekts Allgemeine Java-Themen 6
N Eigenschaften eines Buttons per Setter verändern Allgemeine Java-Themen 5
S Ausfuehrung eines Programms aufzeichnen..? Allgemeine Java-Themen 4
X Ermittlung eines doppelte Paars mit Streams Allgemeine Java-Themen 50
S Vorbereitung eines Praktikums Allgemeine Java-Themen 4
H Aufruf eines Web Service anhand übergebenen Parameter Allgemeine Java-Themen 2
M Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers Allgemeine Java-Themen 1
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
H Rename eines Projekts Allgemeine Java-Themen 1
J Fenstergröße eines anderen Programmes auslesen Allgemeine Java-Themen 9
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
Meeresgott Erste Schritte Sourcetree - Git | Suchen eines Commits Allgemeine Java-Themen 2
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
DaCrazyJavaExpert OOP Ansätze und Tipps zum Porgrammieren eines Taschenrechners Allgemeine Java-Themen 25
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
I Verbindung eines Java-Plugins mit Webserver Allgemeine Java-Themen 3
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
G Iteratoren - Wie kann man mithilfe von Iteratoren nur jeden zweiten Wert eines TreeSets ausgeben? Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
B Spalten eines 2d-Arrays Allgemeine Java-Themen 2
M Rechenprogramm eines wissenschaftlichen Taschenrechners Allgemeine Java-Themen 4
S Eigenschaften (hier Verknüpfung) eines Files lesen Allgemeine Java-Themen 2
E Typüberprüfung eines chars Allgemeine Java-Themen 5
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
T Teile eines Double-Wertes verändern Allgemeine Java-Themen 2
R Rückgabe eines Arrays durch Funktion Allgemeine Java-Themen 9
H Datentypen Typ eines Arrays überprüfen Allgemeine Java-Themen 9
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
C -Verschiedene Versionen eines Programms verwalten Allgemeine Java-Themen 7
O Datentypen Erstellung eines Containers, der verschachtelte Map-Strukturen beherbergen kann Allgemeine Java-Themen 0

Ähnliche Java Themen

Neue Themen


Oben