Ich habe die Aufgabe gehabt einen Binärbaum zu implementieren, bestehend aus einem Konstruktor sowie einer get- und insert-Methode. Der erste Versuch, obwohl ich im Theorieteil etwas hinke:
Klassendiagramm:
Implementierung:
Beschreibung der Methoden:
get: Die get-Methode startet in einem bestimmten Knoten innerhalb des Baumes und überprüft ob der Knoten selbst das Kriterium erfüllt. Falls ja, gibt er den Inhalt des Knoten wieder, falls nicht durch die Baumstruktur durch auf der Suche eines passenden Knotens.
insert: Falls keine Wurzel im Baum exisiert, füge eine Wurzel ein. Anderenfalls füge einen Wurzelknoten einen Wert hinzu. Falls man einem Knoten einem Wert hinzufügt, beginnend von der Wurzel, wird geschaut, ob der Schlüsselwert(Key) kleiner,gleich oder größer als dem hinzugefügten Schlüsselwert ist. Bei gleicher Größe wird nicht weiter forgeführt, falls kleiner oder größer werden neue Knoten erzeugt.
1.Sollen die Klassen separiert werden(BinaryTree,Node,Nutzerklasse) oder geht diese Form in Ordnung?
2.Wie könnte eine Nutzerklasse(Main) aussehen, ich stelle mir vor ein Objekt zu erzeugen,dann mit Hilfe der insert-Methode die Elemente einzufügen und dann über die get-Methode wieder auszugeben.
Falls mir noch Fragen einfallen, stelle ich sie hier
Danke schonmal im Vorraus!
Klassendiagramm:
Implementierung:
Java:
public class BinaryTree {
private Node root = null;
private static class Node {
private Integer key;
private String value;
private Node left = null;
private Node right = null;
public Node(Integer key, String value) {
this.key = key;
this.value = value;
}
}
public boolean insert(Integer key, String value) {
if (root == null) {
root = new Node(key, value);
return true;
} else {
return insert(root, key, value);
}
}
private boolean insert(Node node, Integer key, String value) {
if (key.equals(node.key)) {
// falls doppelter Knoten
return false;
} else if (key < node.key) {
if (node.left == null) {
node.left = new Node(key, value);
return true;
} else {
return insert(node.left, key, value);
}
} else if (key > node.key) {
if (node.right == null) {
node.right = new Node(key, value);
return true;
} else {
return insert(node.right, key, value);
}
}
return false;
}
public String get(Integer key) {
return get(root, key); // Start der Suche bei der Wurzel
}
public String get(Node node, Integer key) {
String result = null;
if (node.key.equals(key)) {
return node.value;
} else {
if (key < node.key && node.left != null) {
result = get(node.left, key);
} else if (key > node.key && node.right != null) {
result = get(node.right, key);
}
}
return result;
}
Beschreibung der Methoden:
get: Die get-Methode startet in einem bestimmten Knoten innerhalb des Baumes und überprüft ob der Knoten selbst das Kriterium erfüllt. Falls ja, gibt er den Inhalt des Knoten wieder, falls nicht durch die Baumstruktur durch auf der Suche eines passenden Knotens.
insert: Falls keine Wurzel im Baum exisiert, füge eine Wurzel ein. Anderenfalls füge einen Wurzelknoten einen Wert hinzu. Falls man einem Knoten einem Wert hinzufügt, beginnend von der Wurzel, wird geschaut, ob der Schlüsselwert(Key) kleiner,gleich oder größer als dem hinzugefügten Schlüsselwert ist. Bei gleicher Größe wird nicht weiter forgeführt, falls kleiner oder größer werden neue Knoten erzeugt.
1.Sollen die Klassen separiert werden(BinaryTree,Node,Nutzerklasse) oder geht diese Form in Ordnung?
2.Wie könnte eine Nutzerklasse(Main) aussehen, ich stelle mir vor ein Objekt zu erzeugen,dann mit Hilfe der insert-Methode die Elemente einzufügen und dann über die get-Methode wieder auszugeben.
Falls mir noch Fragen einfallen, stelle ich sie hier
Danke schonmal im Vorraus!