Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Binärer Suchbaum in ArrayList einsortieren » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
infoubi

cool, ich danke dir herzlich! smile
eulerscheZahl

Ja.
infoubi

Aha! okay! smile
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.