Binary Tree



  • Nicht ganz - aber die Kind-Knoten sollten doch auch eine expression)-Methode anbieten.

    PS: Und ich würde lieber zu viele Klammern setzen als zu wenige - (1+2)*3 ist etwas anderes als 1+2*3



  • Ahh 😃
    Alles klar 🙂

    Noch eine Schlussfrage: Ich habe noch ein arithmetic_tree file, das die Methoden evaluate() und expression() enthält. Expression() ist mir nun klar, aber was soll die evaluate()-Methode machen?

    Zudem habe ich noch ein value_node-file, das die Methode compute() enthält. Doch was soll die noch "computen"? 🙂



  • Was diese Methoden tatsächlich machen sollen, dürfte eigentlich in deiner Aufgabenstellung stehen. Ich kann hier nur auf Basis der Namen Vermutungen anstellen.

    MaxC++ schrieb:

    Noch eine Schlussfrage: Ich habe noch ein arithmetic_tree file, das die Methoden evaluate() und expression() enthält. Expression() ist mir nun klar, aber was soll die evaluate()-Methode machen?

    Den Wert bzw. Ausdruck des Gesamtbaumes zurückgeben (d.h. ein Aufruf von root->compute()

    Zudem habe ich noch ein value_node-file, das die Methode compute() enthält. Doch was soll die noch "computen"? 🙂

    Im Sinne der Polymorphie könnte einer der beiden Kindknoten deines multiplication_node so ein value_node sein, also brauchst du die selben Methoden, damit der rekursive Aufruf _left->compute() bzw. _right->compute() aufgelöst werden kann. Jetzt mußt du dich nur noch fragen, wie du den Wert z.B. der Zahl 7 berechnen würdest 😉



  • Ich habs nun mal so gemacht:

    return _left->compute() * _right->compute() + _value;
    

    ..aber ist das wirklick korrekt?
    So würde ich einfach annehmen, dass _value der "Rest" ist..



  • Nein, der value_node dürfte für die Blätter in deinem Rechenbaum stehen - da sollten beide Kindknoten mit NULL belegt sein und du hast nur den (im Knoten selbst untergebrachten) Wert.

    (PS: nur zur Übung, ob du es verstanden hast: Wie würdest du die addition_node::compute() schreiben?)



  • Wie meinst du das konkret?
    Muss also nur _value returniert werden?

    addition_node::compute() sieht bei mir folgendermassen aus:

    return _left->compute() + _right->compute();
    


  • MaxC++ schrieb:

    Wie meinst du das konkret?
    Muss also nur _value returniert werden?

    Klar, etwas anderes hast du ja nicht.

    (die Addition sieht auch richtig aus)



  • Haha..hast Recht 😉

    Super, besten Dank!
    ..allerdings kann ich _value nicht direkt returnieren, da ja ein string erwartet wird. Gibt's da ne Möglichkeit von typecasting?



  • Casten bringt da nichts, aber Typumwandlung ist schon das richtige Stichwort - die Antwort findet sich bei uns im Archiv: Einmal Zahl nach String und zurück



  • Yeah, vielen herzlichen Dank für die Hilfe! 🙂



  • Mann sollte left und right noch auf Gültigkeit prüfen, bevor man was mit ihnen anstellt.


Anmelden zum Antworten