# Binärer Suchbaum ausgeben



## marmadog (8. Jun 2010)

hallo alle,

was ich habe: eine Klasse BinaererSuchbaum in der schon die lösch, einfüge, sucheNachMin/Max, nachfolger, vorgaenger usw. Methoden drinnen sind 

und auch noch das ausgeben Vor- und Rückwärts, also wenn man ein Beispiel: ('B','A','U','M','B','E','I','S','P','I','E','L') als BsBaum hat, gibt die Methode Vorwärts_ausgeben: "ABEEIILMPSU" also nachdem kleinsten element suchen und ausgeben bis der knoten = null ist....

nun meine frage: wie kann man ein  Intervall [von, bis] geordnet ausgeben? 
(wobei "von" und "bis" generische Datentypen sind (E)) Bsp.: von B bis M --> BAUM

hoffe ihr könnt mir weiterhelfen, denkstoß verpassen....

danke im voraus


PS: ich meine nicht einen Baum malen sondern ganz schlicht wie oben.


----------



## XHelp (9. Jun 2010)

Welche Linearisierung benutzt du denn für die Rückwärtsausgabe? oO bei pre-, post- oder in-order bekommst du, glaube ich, nicht wirklich das gewünschte ergebnis. Oder drehst du die in-order einfach um?

Dein Beispiel scheint nicht ganz richtig zu sein:


> von B bis M --> BAUM


das wird in einem binärem Suchbaum nicht klappen, denn A liegt nicht zwischen B und M (sofern wir hier vom wirklichen Alphabet sprechen)

Aber um generell einen Bereich anzugeben, müsste folgendes in der Linearisierungsmethode geschehen (bereich zwischen x und y)
a) wenn aktuelle Knoten < x ist, dann die "Ausgabe" einfach weglassen
b) wenn aktuelle Knoten > y ist, dann abbrechen.


----------



## marmadog (9. Jun 2010)

[JAVA=42] public void ausgabeRueckw(){
        System.out.println("--------- Ausgabe rueckwaerts -------------");
        Knoten<E> kp = sucheMax();
        while (kp != null) { 
           System.out.print(kp);
           kp = vorgaenger(kp);
           }
        System.out.println();
        } [/code]

und dies soll geschrieben werden:

[JAVA=42]void ausgabeIntervall(E von, E bis)[/code]


----------



## XHelp (9. Jun 2010)

Also das hier ist der binäre Suchbaum, wenn du ihn mit ('B','A','U','M','B','E','I','S','P','I','E','L') fütterst:


Deine Funktion würde "U" als max finden, und dann nur "UB" ausgeben. Zumindestmal sollte die es tun, wenn alles andere richtig gemacht wurde. (denn U hat nur einen Vorgängen, und dieser ist schon die Wurzel)

Und die Ausgabe mit dem Interval müsste mit der Idee aus meinem letzten Post klappen

[edit]
Habe mitlerweile das ganze selber Implementiert und die Idee, die ich zu dem Intervall hatte funktioniert auch in der Praxis.
[/edit]


----------

