Guten Tag,
Aufgabenstellung (Menge als Suchbaum):
Implementieren sie für die Klasse TreeSet die Methode iterator(). Der Iteraltor soll die Elemente der Menge iterativ in aufsteigender Ordnung durchlaufen.
Außerdem sei eine Implementierung der Klasse Stack<T> gegeben.
Eigentlich dachte ich, das ich sowas verstanden habe doch leider nicht wirklich.
Mein Code würde so aussehen:
Das Problem ist nur wenn in einer while Schleife hasNext() immer wieder neu aufgerufen wird hängt er bei der größten Zahl in einer endloßschleife Fest!
Doch leider ist mir nichts besseres eingefallen.
Ich wollte erst im Suchbaum ganz nach rechts dann die Zeiger ändern und dann weiter machen. Doch auch das habe ich nicht hin bekommen da ich ja ein T zurück geben muss bei Next() hatte ich das Problem current zu verändern so das ganz rechts das Element weg fällt.
Kann mir dabei jemand weiter Helfen?
LG
Aufgabenstellung (Menge als Suchbaum):
Implementieren sie für die Klasse TreeSet die Methode iterator(). Der Iteraltor soll die Elemente der Menge iterativ in aufsteigender Ordnung durchlaufen.
Java:
public class TreeSet<T extends Comparable<T>> implements Set<T> {
protected class Node {
T value;
Node left, right;
Node(T v) {
value=v;
}
}
protected Node root = null;
@Override
public Iterator<T> iterator() {
}
Außerdem sei eine Implementierung der Klasse Stack<T> gegeben.
Code:
class Stack<T> extends Vector<T> {
boolean empty() { ... }
T pop () { ... }
T push(T itme) { ... }
int size() { ... }
}
Eigentlich dachte ich, das ich sowas verstanden habe doch leider nicht wirklich.
Mein Code würde so aussehen:
Java:
public class TreeSet<T extends Comparable<T>> implements Set<T> {
protected class Node {
T value;
Node left, right;
Node(T v) {
value=v;
}
}
protected Node root = null;
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
Node current = root;
Stack<T> s = new Stack<>();
public boolean hasNext() {
if(current.left != null || current.right != null) {
s = inorder(current,s);
return true;
}
else return false;
}
public T next() {
if(!s.isEmpty())
return s.pop();
else return null;
}
private Stack<T> inorder(Node root, Stack<T> s) {
if(root!=null) {
inorder(root.left,s);
s.push(root.value);
inorder(root.right,s);
}
return s;
}
};
}
Das Problem ist nur wenn in einer while Schleife hasNext() immer wieder neu aufgerufen wird hängt er bei der größten Zahl in einer endloßschleife Fest!
Doch leider ist mir nichts besseres eingefallen.
Ich wollte erst im Suchbaum ganz nach rechts dann die Zeiger ändern und dann weiter machen. Doch auch das habe ich nicht hin bekommen da ich ja ein T zurück geben muss bei Next() hatte ich das Problem current zu verändern so das ganz rechts das Element weg fällt.
Kann mir dabei jemand weiter Helfen?
LG