Die letzten 10 Beiträge |
infoubi |
cool, ich danke dir herzlich!
|
eulerscheZahl |
Ja. |
infoubi |
Aha! okay!
Also:
public ArrayList<T> createSortedList(BinarySearchTree<T> tree) {
return createSortedList(tree, new ArrayList<T>());
}
private ArrayList<T> createSortedList(BinarySearchTree<T> tree, ArrayList<T> list)
{
if (tree.left != null)
createSortedList(tree.left, list);
list.add(tree.thing);
if (tree.right != null)
createSortedList(tree.right, list);
return list;
}
Und das wärs, oder? =) |
eulerscheZahl |
Die add Methode ist nur zum Erzeugen eines Baums der dann ausgegeben werden kann. Sie ist nicht Teil deiner Aufgabe.
Die Umwandlung in eine ArrayList erfolgt, wie von dir vorgegeben, mit createSortedList.
Du musst dann eben thing hinzufügen, statt value, ansonsten ändert sich nichts. |
infoubi |
Ok, alles klar. :-)
Aber wenn ich meinen Baum in eine ArrayList wandeln würde, wie müsste ich da vorgehen? Da kann ich ja eben nicht deine add Methode verwenden, oder habe ich das Prinzip einfach noch nicht verstanden?
Weil die insert Methode soll so stehen bleiben und dann in einem nächsten Schritt die sortierte Liste ausgegeben werden. |
eulerscheZahl |
Unsere Bäume unterscheiden sich etwas:
* du hast ein Key Value Paar, bei mir ist das beides eins.
* du übergibst den Baum an die Funktion (und könntest sie somit static deklarieren), ich verwende this.
* du überschreibst bei gleichem Key den alten Wert, ich habe dann mehrere gleiche Einträge
Beide Seiten haben ihre Vorteile und Nachteile, da wählt man je nach Anwendungsfall das passende aus.
Und ich schreibe die Werte nur einmal in die ArrayList. Führe das Programm aus, dann wirst du schon sehen, dass keine Zahl doppelt erscheint. |
infoubi |
Ok, aber eigentlich hätte ich die Werte vorher bereits in einen Baum eingefüllt. Mit einer insert-Methode.
Und von diesem Baum muss ich jetzt die ArrayListe zurückgeben. Dann wäre es ja falsch, wenn ich die Werte "nochmals" einfügen würde?
Meine Insert Methode würde etwa so ausehen:
public BinarySearchTree<T> insert(BinarySearchTree<T> tree, int key, T thing) {
if(tree==null)
return new BinarySearchTree<T>(key,thing);
if(tree.key==key)
tree.thing=thing;
if(key< tree.key)
tree.left=insert(tree.left, key,thing);
if(key> tree.key)
tree.right=insert(tree.right, key, thing);
return tree;
}
(Stimmt das so überhaupt?) |
eulerscheZahl |
Vom Baum in die Liste kriegst du die Werte mit createSortedList. Zeile 33: list.add(tree.value);
Aber dazu müssen die Werte ja erst mal in den Baum, dafür habe ich mir die Methode add geschrieben. |
infoubi |
Ok, danke!
Aber wenn ich jetzt wirklich nur eine Liste ausgeben müsste, ohne zusätzliche weitere Methode (wie hier add).
Wie bringe ich dann die Werte auf die Liste? |
eulerscheZahl |
Nein. Aber damit man einen Baum ausgeben kann, muss man erst mal einen haben. Ich will ja auch testen können, dass ich dir keinen Unsinn schreibe. |
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |
|
|