Rekursive Breitenseitenfunktion in Java oder C ++?

8

Hier ist ein Java-Code für die erste Reise:

%Vor%

Ist es möglich, eine rekursive Funktion zu schreiben, um das Gleiche zu tun?

Zuerst dachte ich, das wäre einfach, also kam ich heraus:

%Vor%

Dann habe ich herausgefunden, dass es nicht funktioniert. Es ist tatsächlich das Gleiche:

%Vor%

Hat jemand schon einmal darüber nachgedacht?

    
joejax 03.06.2010, 19:16
quelle

5 Antworten

15

Ich kann mir nicht vorstellen, warum Sie möchten, wenn Sie eine perfekte iterative Lösung haben, aber hier gehen Sie;)

%Vor%

Ich sollte hinzufügen, dass, wenn Sie wirklich die Knoten des Baums rekursiv durchqueren möchten, Sie ein DFS mit einem level -Parameter machen können, und die Knoten nur bei level ausgeben, dann recurse up. Aber das ist nur verrückt reden, weil Sie Knoten wayyyyy zu oft wieder besuchen würden ... einfach akzeptieren, dass BFS ist ein iterativer Algorithmus. :)

    
Stephen 03.06.2010, 19:23
quelle
8

Der BFS-Algorithmus ist kein rekursiver Algorithmus (im Gegensatz zu DFS).

Ein könnte versuchen, eine rekursive Funktion zu schreiben, die den Algorithmus emuliert, aber das würde ziemlich bizzarisch enden. Was wäre der Sinn dafür?

    
ob1 03.06.2010 19:23
quelle
6

Sie können iterative Tiefentiefe-zuerst-Suche verwenden, was effektiv ein Breast-First-Algorithmus ist, der Rekursion verwendet . Es ist sogar besser als BFS, wenn Sie einen hohen Verzweigungsfaktor haben, da es nicht viel Speicher verbraucht.

    
gustafc 03.06.2010 19:58
quelle
0

Das wird nicht für alle befriedigend sein - da bin ich mir sicher. Mit allem Respekt für alle. Um die Leute, die fragen, was ist der Sinn? Der Punkt ist, dass wir glauben, dass jeder iterative Algorithmus auch eine (einfache?) Rekursive Lösung hat. Hier ist eine Lösung von "sisis" von stackoverflow.

%Vor%

Es hat eine gewisse Menge an Spaß daran, aber es ist nicht klar, dass es gegen rekursive Regeln verstößt. Wenn es keine rekursiven Regeln verletzt, sollte es akzeptiert werden. IMHO.

    
jim 26.02.2013 21:03
quelle
0

Eine einfache BFS- und DFS-Rekursion: Drücken Sie einfach / den Wurzelknoten des Baumes in Stack / Queue an und rufen Sie diese Funktionen auf!

%Vor%

}

%Vor%

}

    
A-patel-guy 04.05.2015 01:21
quelle