kommt man für das Maximum mit Math.max allein nicht aus, da sich a ja erhöht!
Folgender Lambda Ausdruck ist zielführend:
Java:
(a, v)->Math.max(a,v)- a
Hiermit lässt man aggregated, also die Summe, nie höher als die im jeweiligen Durchlauf höhere der beiden Zahlen a und v werden.
Die Lösung für 3. kannst du im Code nachvollziehen.
Wie folgt getestet:
Was du umgesetzt hast entspräche eher diesem Text:
Der aggregierte Wert hat beim ersten Aufruf den Wert 0. Bei allen folgenden Aufrufen den zuletzt durch apply zurückgegebenen Wert plus dem vorherigen Wert.
Dort steht aber der "aggregierte Wert" mit der Randbedingung für den ersten Aufruf. Aggregiert bedeutet zusammengefasst, was für Zahlen im einfachsten Fall aufsummieren impliziert.
"aggregierte Wert" ist erstmal nur eine Bezeichnung für den Wert. Das kann vieles Bedeuten. In diesem Fall ist mit aggregieren gemeint, dass aus allen Werten des Baumes, durch die Anwendung des Lamda Ausdruckes, ein einzelner Wert berechnet wird.
Ok ich verstehe deinen Ansatz. Aber aggregiert deutet für mich stark auf summieren hin, weswegen ich die each Methode anders als du angenommen habe und wir somit auf 2 Lösungsansätze durch Unklarheiten in der Aufgabenstellung kommen.
//Edit: wobei der Satz "Bei allen folgenden Aufrufen den zuletzt durch apply zurückgegebenen Wert." doch summieren widerspricht.
Deine Lösungen kann ich mit neuer Ansicht der each Methode bestätigen.
Das habe ich doch bereits beschrieben. Weiter: a wird ja für jeden Aufruf mitgegeben und dient somit als "Puffer" um Informationen zwischen 2 Aufrufen zu teilen. In dem Fall ist die Information die zum Aufruf bekannte höchste Zahl. Mit Math.max ermitte ich die höhere der Beiden Zahlen und gebe die Differenz zur alten höheren Zahl zurück. Die die zurückgegebene Differenz des Lambdas wird ja in aggregated aufsummiert. Also summiere ich entweder 0 auf oder v-a auf. Ich kann es leider schlecht erklären. Einfach im Debugger mal nachvollziehen.
Du musst beachten, dass ich die Aufgabe anders als DrZoidberg verstanden habe und vermutlich falsch: Ich ging ja davon aus, dass aggregated die Summe sein soll.
Somit gebe ich bloß den nodeValue v zurück, der in der each aufsummiert wird. each gibt mit dieser Lamda also die Summe zurück! Dann teile ich durch die Anzahl der nodes, denn so bildet man nun mal den Durchschnitt.
Falls das Klausuraufgaben sind musst du dich unbedingt damit beschäftigen und es verstehen.