Rekursion Binärbaum

LatinFavourite

Bekanntes Mitglied
Hallo,

ich beschäftige mich gerade mit Binären Suchbäumen und versuche die entsprechendem Methoden rekursiv zu implementieren. Ich stelle mir aber gerade die Frage, wie es funktioniert, da scheinbar keine return verwendet wird. Warum benötige ich keine return Anweisung? Wird doch ansonsten bei Rekursionen verwendet. Für eine Erklärung wäre ich sehr dankbar.

Mit freundliche Grüßen
LatinFavourite
 

LatinFavourite

Bekanntes Mitglied
Es gibt keine Aufgabenstellung. Habe den Binärbaum bis jetzt iterativ implementiert und wollte dies nun rekursiv vornehmen. Habe mir den Wikipedia Artikel zu dem Thema durchgelesen und scheibar wird hier auf ein return verzichtet, was ich nicht verstehe. Zur Ausgabe der Knoten wird, wenn vorhanden der linke Knoten ausgegeben. Ich komme aber nicht dahinter, wie man dann wieder an den entsprechende Vater gelangt und nun den rechten Knoten auswählt. Die Methode wird zwar erneut aufgerufen, jedoch ohne return. Ich bin einfach verwirrt.
 

stg

Top Contributor
Sprichst du von der Traversierung oder wvon redest du denn überhaupt? Hier weiß keiner, was du genau gelesen und dabei nicht verstanden hast. Post doch einfach den betreffenden Code-Ausschnitt und stelle konkrete Fragen dazu.
 

LatinFavourite

Bekanntes Mitglied
Ganz genau, darauf beziehe ich mich. Beispielsweise das Wikipedia Beispiel.

Java:
preOrder( knoten ) {

// Führe die gewünschten Aktionen am Knoten aus, z.B.:
print( knoten );

if ( knoten.links ≠ null )
preOrder( knoten.links ); // rekursiver Aufruf

if ( knoten.rechts ≠ null )
preOrder( knoten.rechts );
}

Warum wird kein return bei Aufruf von preOrder() benötigt? Wie gelangt man dann wieder nach Abarbeiten des linken Knoten zum Vater, um rechts fortzufahren?
 

stg

Top Contributor
Du gibst nur die Knoten aus, da interessiert ein Rückgabewert doch niemanden. Was willst du denn damit machen?

Wenn der erste if-Block fertig abgearbeitet ist, dann geht's ganz normal mit dem zweiten weiter.

Interessant ist hier eigentlich nur, wo du die Ausgabe genau platzierst. Führe doch einfach mal alle drei Varianten aus, dann solltest du eigentlich ziemlich genau sehen, was da passiert.
 

LatinFavourite

Bekanntes Mitglied
Schon einmal vielen Dank. Also die Rekursion besteht darin, dass nach preOrder(knoten.links) Wieder an diese Stelle gesprungen wird und somit der zweite if-Block bearbeitet wird. Ich dachte dafür wäre ein return notwendig. Danke.
 

LatinFavourite

Bekanntes Mitglied
Hallo, ich melde mich noch einmal zurück, habe inzwischen das Einfügen und Ausgeben rekursiv implementiert. Das Löschen macht mir gerade noch Schwierigkeiten. Wenn ich bei einem gefüllten Baum die Wurzel löschen möchte, so gehe ich einen nach rechts und dann solange nach links bis kein Element folgt. Das letzte Element ist dann die neue Wurzel. Die Wurzel wird bei mir auch ersetzt, der Knoten tritt dann jedoch doppelt auf. Bin noch nicht fertig, aber hat jemand vielleicht einen Rat. Danke.


Java:
public void delete(K key){
        if(mRoot.mKey.compareTo(key) == 0){
            if(mRoot.mLeft == null && mRoot.mRight == null){
                mRoot = null;
            }else if(mRoot.mLeft != null && mRoot.mRight == null){
                mRoot = mRoot.mLeft;
                mRoot.mLeft = null;
            }else if(mRoot.mLeft == null && mRoot.mRight != null){
                mRoot = mRoot.mRight;
                mRoot.mRight = null;
            }else{
                delete(mRoot.mRight, key);
            }
        }
    }
  
    private void delete(Node current, K key){

        if(current.mLeft != null){
            delete(current.mLeft, key);
        }else{
            mRoot.mKey = current.mKey;
            mRoot.mData = current.mData;
            current = null;
        }
          
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Rekursion Aufrufbaum Allgemeine Java-Themen 7
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
Zeppi Rekursion StackOverflowError Allgemeine Java-Themen 4
J Rekursion Allgemeine Java-Themen 4
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
parrot Rekursion Aufgabe Allgemeine Java-Themen 12
B Rekursion Allgemeine Java-Themen 11
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
J Rekursion Mergesort Allgemeine Java-Themen 10
R Rekursion Allgemeine Java-Themen 3
R Programm zur Rekursion Allgemeine Java-Themen 5
V Rekursion Allgemeine Java-Themen 2
J Denkfehler Rekursion Allgemeine Java-Themen 5
I Raute mit Rekursion "zeichnen" Allgemeine Java-Themen 7
B Rekursion Allgemeine Java-Themen 2
B Rekursion Allgemeine Java-Themen 22
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
Hacer Rekursion- sumOfAllNodes Allgemeine Java-Themen 5
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
Y Rekursion Allgemeine Java-Themen 19
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
T Pascalsches Dreieck ohne array und rekursion Allgemeine Java-Themen 9
P Rekursion Allgemeine Java-Themen 9
R Threading und Rekursion führen zu “GC overhead limit exceeded” Allgemeine Java-Themen 4
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
C Rekursion Fibonacci Allgemeine Java-Themen 31
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
eQuest Rekursion Dauer Allgemeine Java-Themen 6
Weiti Swingworker und Rekursion Allgemeine Java-Themen 8
L fragwürdige Rekursion Allgemeine Java-Themen 4
L Kleine Rekursion Allgemeine Java-Themen 12
M Rekursion!! Allgemeine Java-Themen 8
J Rekursion in Schleifenkonstrukt wandeln Allgemeine Java-Themen 21
R Rekursion Ablauflogik Allgemeine Java-Themen 19
M Rückwärts geführte Rekursion Allgemeine Java-Themen 3
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
G Werte bei Rekursion viel höher als erwartet Allgemeine Java-Themen 3
G Rekursion - Denksport Allgemeine Java-Themen 6
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
S Rekursion Allgemeine Java-Themen 2
Linad Tiefe der Rekursion als Abbruchbedingung Allgemeine Java-Themen 6
Linad Zahlensysteme -> Rekursion Allgemeine Java-Themen 4
N Frage zu einer Rekursion Allgemeine Java-Themen 4
V Binärbaum Blätter Allgemeine Java-Themen 10
R0m1lly BinärBaum auf Konsole ausgeben Allgemeine Java-Themen 9
S Binärbaum prüfen Allgemeine Java-Themen 0
0 Binärbaum vervollständigen Allgemeine Java-Themen 0
K Binärbaum - InOrder Traversierung Allgemeine Java-Themen 0
N Binärbaum verstehen Allgemeine Java-Themen 6
J Die Menge einer Zahl im Binärbaum zählen Allgemeine Java-Themen 7
G Suchweg durch Binärbaum speichern Allgemeine Java-Themen 4
G Binärbaum aktualisieren Allgemeine Java-Themen 11
T Wie heißt ein Binärbaum, dessen Knoten immer zwei Kinder haben müssen? Allgemeine Java-Themen 2
M Binärbaum auf vollständigkeit prüfen Allgemeine Java-Themen 4
S Knoten zählen in einem Binärbaum Allgemeine Java-Themen 2
G Binärbaum (PreOrder, InOrder, PostOrder) Allgemeine Java-Themen 6
S Traversierung (Binärbaum) Allgemeine Java-Themen 3
M Binärbaum aus Infix- und Präfixordnung erstellen Allgemeine Java-Themen 5
K traversieren von binärbaum Allgemeine Java-Themen 4
L Binärbaum sortiert ausgeben Allgemeine Java-Themen 11

Ähnliche Java Themen


Oben