Das war nicht als Frage gemeint. Also: "Du kannst es rekursiv oder iterativ mit Stack lösen."
Jetzt darfst du erstmal bitte selber Lösungsvorschläge machen, oder erklären, wo es hakt, bzw. wieso du selber nicht auf eine Lösung kommst.
Also diese Klassen solltest du nochmal von Grund auf neu designen. Warum hat denn ein Knoten im Baum zwei Referenzen auf den Baum und nicht auf die Kindknoten? So kannst du eigentlich überhaupt nicht durch die Knoten des Baumes iterieren.
Du solltest vielleicht erstmal die genaue Bedeutung von "was ist bei dir ein Baum/Tree" und "was ist bei dir ein Knoten/TNode" klären.
Die Klasse wurde nicht von mir geschrieben, die Klasse war für die Aufgabe gegeben und die soll halt um die Methode erweitert werden, die die Blätter ausgibt
Das will ich mal hart bezweifeln. Niemand würde so einen Quatsch in eine Aufgabenstellung schreiben. Nein wirklich, das ist ganz großer Mist. Zumal die Instanzmethoden der Klasse Tree auch überhaupt kaum mit der eigentlichen `this` Instanz arbeiten sondern immer unnötigerweise den Tree als Parameter bekommen.
Aber sei's drum. Einen Blattknoten würdest du hier daran erkennen, dass `l.root == null` ist bzw. `r.root == null`.
Aber ehrlich, die Benennung der Felder und auch der Methoden ist einfach unfassbar schlecht.
Naja so ist es halt in der Aufgabe, arbeite grade paar Altklausuren durch und es gibt noch paar ähnliche Aufgabe die genau so mit der Tree und Node Klasse aufgebaut sind
Das will ich mal hart bezweifeln. Niemand würde so einen Quatsch in eine Aufgabenstellung schreiben. Nein wirklich, das ist ganz großer Mist. Zumal die Instanzmethoden der Klasse Tree auch überhaupt kaum mit der eigentlichen `this` Instanz arbeiten sondern immer unnötigerweise den Tree als Parameter bekommen.
Aber die Methoden stammen ja von ihm so wie ich das verstanden habe. Das da also mit dem Parameter statt mit this gearbeitet wird, könnte er dann ja anpassen.
Aber den Aufbau des Baumes sehe ich so auch zum ersten Mal. Ich kenne es eigentlich auch so, dass es nur einen Tree gibt, der dann Nodes hat. Ob sich da jemand gedacht hat, dass er da dann rechts und links wieder jeweils einen Baum haben will? Und daher jeweils wieder einen Tree genommen hat? Aber den wirklichen Sinn dahinter sehe ich nicht, denn das macht es ja nur unnötig komplexer und damit schwerer zu verstehen....
Aber die Methoden stammen ja von ihm so wie ich das verstanden habe. Das da also mit dem Parameter statt mit this gearbeitet wird, könnte er dann ja anpassen.
Aber den Aufbau des Baumes sehe ich so auch zum ersten Mal. Ich kenne es eigentlich auch so, dass es nur einen Tree gibt, der dann Nodes hat. Ob sich da jemand gedacht hat, dass er da dann rechts und links wieder jeweils einen Baum haben will? Und daher jeweils wieder einen Tree genommen hat? Aber den wirklichen Sinn dahinter sehe ich nicht, denn das macht es ja nur unnötig komplexer und damit schwerer zu verstehen....
Ja genau. Und genau diese beiden Methoden wurden bemängelt.
Du könntest diese so umschreiben, dass kein Parameter übergeben wird. Also kein Parameter Tree r. Statt dem r verwendest Du dann this bzw. lässt es direkt weg. Der Aufruf von z.B. tiefe(r.root.r); wird dann zu root.r.tiefe();
Die Frage hier ist: Was kennzeichnet denn überhaupt einen Blattknoten hier?
Denn es kann ja auch sowohl nur der linke als auch nur der rechte Teilbaum gefüllt sein. Z.B. beim Einfügen von 1, 2, 3, 4 (in dieser Reihenfolge) so dass sich ein rechtslastiger Baum ergibt. Ist jetzt nur 4 der Blattknoten?
Na dann prüfe doch in "tiefe" für den aktuellen Tree, ob sein root.l.root == null ist und sein root.r.root == null ist. Dann ist der Knoten vom aktuellen Tree ein Blattknoten.