hallo,
habe wieder mal aufgaben zu erledigen -.-
die aufgabe lautet:
Implementieren Sie einen Datentyp SearchTree<T>, der einen Suchbaum mit Elementen
des generischen Typs T reprasentiert. SearchTree<T> soll die folgenden Eigenschaften
besitzen:
Der Suchbaum entspricht den Spezikationen:
1. Datenobjekte werden nur in den Blattern gespeichert.
2. Interne Knoten eines Suchbaums besitzen genau zwei Nachfolger.
3. Elemente im linken Teilbaum eines Knotens x sind stets kleiner oder gleich dem
Element von x.
4. Elemente im rechten Teilbaum eines Knotens x sind stets grosser als das Element
von x.
{ Es gibt eine Methode public void insert(int key, T element), die ein neues
Element in den Suchbaum einordnet.
dannach soll ich no eine delete-methode implementieren, welches ein element löscht und eine methode tostring, die alle values der blätter auf der konsole ausgibt. aber soweit bin ich leider noch nicht.
dieser quellcode war schon im tutorium gegeben:
ich habe versucht, die insertmethode zu implementieren...
ich habe die 3 fälle unterschiede:
baum leer--> wurzel root ist dann übergebener wert
wurzel ist ein Blatt--> vergleichen der schlüssel--> root wird Fork und erhält zwei kindknoten vom typ Leaf
bei der dritten fallunterscheidung komme ich leider nicht so richtig weiter... und ich erhalte fehlermeldungen, die ich nicht beseitigen kann
wäre sehr dankbar, wenn ich paar tipps erhalte, wie ich besser vorgehen könnte, da ich immer durcheinanderkomme
lg
habe wieder mal aufgaben zu erledigen -.-
die aufgabe lautet:
Implementieren Sie einen Datentyp SearchTree<T>, der einen Suchbaum mit Elementen
des generischen Typs T reprasentiert. SearchTree<T> soll die folgenden Eigenschaften
besitzen:
Der Suchbaum entspricht den Spezikationen:
1. Datenobjekte werden nur in den Blattern gespeichert.
2. Interne Knoten eines Suchbaums besitzen genau zwei Nachfolger.
3. Elemente im linken Teilbaum eines Knotens x sind stets kleiner oder gleich dem
Element von x.
4. Elemente im rechten Teilbaum eines Knotens x sind stets grosser als das Element
von x.
{ Es gibt eine Methode public void insert(int key, T element), die ein neues
Element in den Suchbaum einordnet.
dannach soll ich no eine delete-methode implementieren, welches ein element löscht und eine methode tostring, die alle values der blätter auf der konsole ausgibt. aber soweit bin ich leider noch nicht.
dieser quellcode war schon im tutorium gegeben:
Java:
class BinarySearchTree<T>{
abstract class Node{
int key;
//Konstruktor
public Node (int key){
this.key = key;
}
public abstract T search(int key); // wird selbst nie aufgerufen, immer ein Objekt vom Typ Fork oder Leaf, die ihre jeweiligen Methoden anwenden
}
class Fork extends Node{
Node leftChild;
Node rightChild;
//Konstruktor
public Fork(int key, Node lc, Node rc){ // Fork ist ein innerer Knoten
super(key);
this.leftChild = lc;
this.rightChild = rc;
}
public T search(int key){
if (this.key <= key) {
return rightChild.search(key);
}
else { // kleiner gleich immer links lang
return leftChild.search(key);
}
}
}
class Leaf extends Node{
T value;
//Konstruktor
public Leaf(int key, T val){
super(key);
this.value = val;
}
public T search (int key){
if (this.key == key){
return this.value;
}
else {
return null;
}
}
}
private Node root;
//Konstruktor
public BinarySearchTree(){
this.root = null;
}
ich habe versucht, die insertmethode zu implementieren...
Java:
public void insert(int key, T value){
Node a=root;
if (root==null){
root=new Leaf(key,value);
}
else if(a instanceof Leaf){
if(key<=a.key){
root=new Fork(key, new Leaf(key,value), new Leaf(a.key, a.value));
}
else{ root=new Fork(a.key, new Leaf(a.key, a.value), new Leaf(key,value));
}
}
else{
Node b=a.search(key);
if(key<=b.key){
root=new Fork(key, new Leaf(key,value), new Leaf(b.key, b.value));
}
else{ root=new Fork(b.key, new Leaf(b.key, b.value), new Leaf(key,value));
}
}
}
ich habe die 3 fälle unterschiede:
baum leer--> wurzel root ist dann übergebener wert
wurzel ist ein Blatt--> vergleichen der schlüssel--> root wird Fork und erhält zwei kindknoten vom typ Leaf
bei der dritten fallunterscheidung komme ich leider nicht so richtig weiter... und ich erhalte fehlermeldungen, die ich nicht beseitigen kann
wäre sehr dankbar, wenn ich paar tipps erhalte, wie ich besser vorgehen könnte, da ich immer durcheinanderkomme
lg