Frage zur Rekursion in Binär-Bäumen
-
In diversen C++ Tutorials habe ich gelesen, dass Rekursion also Methoden die sich selbst aufrufen ineffizient sind und schnell zu einem Stackoverflow führen. Ich habe nun für eine Binärbaum eine Funktion geschrien (coutall()) die alle Daten des Baumes auf der Konsole ausgibt.
#ifndef __tree__hpp__ #define __tree__hpp__ #include <iostream> using namespace std; #define coutl (cout << endl) struct tree { tree *lnext; tree *rnext; int data; tree(int ndata) { lnext = 0; rnext = 0; data = ndata; } ~tree() { delete lnext; lnext = 0; delete rnext; rnext = 0; delete &data; } void coutall() { coutl << data; if(lnext != 0) { lnext->coutall(); } if(rnext != 0) { rnext->coutall(); } } }; #endifMeine Frage ist nun ob die Funtion coutall() zu einem Stackoverflow führen kann (sie hat keinen Rückgabewert), bzw. wie effizient sie ist.
Tut mir leid wenn der Code nicht richtig formatiert ist, ist irgendwie nicht gegangen.
-
- Klar kann die Funktion zu einem Stackoverflow führen.
- Definiere "effizient" und ich kann dir sagen, ob sie es ist

-
Klar kann sie das, wenn der Baum genügend Hoch ist.
Das kannst du selber herausfinden, indem du es einfach probierst. Und dann hättest du auch gemerkt, dass das hier:
delete &data;einfach nur Mist ist.
Bei Bäumen (die nicht entartet sind) ist die Rekursion meistens aber nicht so ein riesen Problem, weil ein Pfad sowieso maximal nur log(n) lang wird.
Man kann das natürlich aber auch als Schleife ganz gut iterativ machen.
-
Vielen Dank für die schnellen Antworten.
Ich werde die Ausgabe jetzt iterativ lösen.
Das mit dem delete &data; tut mir leid. Ich weiß, dass man delete nur dann einsetzen soll wenn man new verwendet hat.