binäre Baume

Habe folgende Aufgabenstellung:

Angenommen in einem binären Baum ist in jedem Knoten ein int-Wert unter dem Komponentennamen zahl gespeichert. Geben Sie eine Funktion addiere(…) an, die die int-Werte aller Knoten zu einer Summe aufaddiert und als Funktionsergebnis liefert, wobei die jeweilige Zahl eines Knotens immer mit der Tiefe des Knotens im Baum zu multiplizieren ist.

Bei der Spezifikation der Funktion ist von folgendem Aufbau eines Baumknotenelements auszugehen:
struct zahlen { int zahl;
struct zahlen *links;
struct zahlen *rechts; };

Wurden die einzelnen Zahlen z.B. in folgender Reihenfolge im Binärbaum eingetragen: 10, 20, 30, 5, 2
so sollte die Funktion addiere() den folgenden Wert liefern: 156

wer kann mir meine Fehler korrigieren?

Meine Funktion:

struct zahlen { int zahl;
struct zahlen *links;
struct zahlen *rechts; };

int addieren ( stuct zahlen *pWurzel)
{
if (pWurzel == NULL)
{printf(„Baum ist leer“)
return 0;
}
else
retutn addieren (*pWurzel).zahl + (*pWurzel).links +(*pWurzel).rechts;

Hallo,

Meine Funktion:
struct zahlen { int zahl;
struct zahlen *links;
struct zahlen *rechts; };
int addieren ( stuct zahlen *pWurzel)
{
if (pWurzel == NULL)
{printf(„Baum ist leer“)
return 0;
}
else
retutn addieren (*pWurzel).zahl + (*pWurzel).links
+(*pWurzel).rechts;

Die letzte Anweisung ist wohl ‚return addieren(*pWurzel).zahl + (*pWurzel).links + (*pWurzel).rechts);‘
Da wird erst eine Addition von der Art ‚(int) + (struct zahlen*) + (struct zahlen*)‘ durchgefuehrt. Wenn das geht (kann man zwei Zeiger addieren?) dann wirst Du einen Speicherzugriffsfehler erhalten (bei einem vernuenftigen Betriebssystem).
Was Du aber eigentlich willst ist die Zahl vom Knoten + die Summe ueber die Zahlen der beiden Teilbaeume, das ist ‚(pWurzel->zahl + addieren(pWurzel->links) + addieren(pWurzel->rechts))‘.

Gruss
Diether

P.S.
Bitte setze immer korrekten Code ein (einfach aus Deinem Programm kopieren), das macht es einfacher nachzuvollziehen und den Fehler zu finden.

Danke!

das mit „retutn“ tut mir leid, habe mich vertippt.

Meine Funktion:

struct zahlen { int zahl;
struct zahlen *links;
struct zahlen *rechts; };

int addieren ( stuct zahlen *pWurzel)
{
if (pWurzel == NULL)
{printf(„Baum ist leer“)
return 0;
}
else
retutn addieren (*pWurzel).zahl + (*pWurzel).links
+(*pWurzel).rechts;

Hi Alex!

Dieses Programm ist ein ziemliches Chaos, so kann das nicht ansatzweise funktionieren. Versuch mal folgende Sachen zu ändern:

  • geschweifte Klammer um die ganze Funktion, inklusive dem return.
  • nach jeder Anweisung ; einfügen ( außer bei if und else, aber bei printf )
  • die return- Anweisung muß sich so zusammensetzen:
    return pWurzel->zahl + addieren( links ) + addieren( rechts );
  • was Du noch gar nicht drin hast, ist die Ebene. Du könntest noch eine int-Variable einführen, die Dir das angibt. Die Lösung könnte dann so aussehen:
    return ( pWurzel->zahl * Ebene ) + addieren( links ) + addieren( rechts );

Probier mal die Punkte zu ändern, wenn ich Dir ne Lösung schicke, lernst Du nicht so viel :wink:
Wenn Du noch fragen hast oder gar nicht zurecht kommst, kannste mir ne Mail schreiben.

Ciao Benni