@DKKA: Der ”Trick” ist nicht die Liste leeren zu wollen, sondern immer eine neue zu nehmen, dann stellt sich das Problem gar nicht erst. Üblicherweise setzt man als Default-Wert dazu `None` und testet darauf als erstes in der Funktion oder Methode und wenn das Argument `None` ist, dann bindet man eine leere Liste an den Namen.
Code: Alles auswählen
def in_order_traversal(self, result=None):
if result is None:
result = list()
Hier sieht man auch ganz gut warum es eine blöde Idee ist Namen von eingebauten Funktionen für etwas anderes zu verwenden. Wenn ich das nicht zu `result` umbenannt hätte, würde die letzte Zeile von dem Quelltextschnippsel nicht funktionieren.
Wenn Du schon die Ergebnisliste als Akkumulator durch die ganzen Aufrufe mitschleppst, könntest Du übrigens auch gleich den rekursiven Aufruf eliminieren und das ganze damit auch für tiefe Bäume nutzbar machen ohne dass Du an das Rekursionslimit stösst weil der Aufrufstapel zu voll wird.
Edit: Mit Deinem ersten Test auf einen Wert hast Du übrigens ein Problem mit Werten die „falsch” sind. Du kannst also keine 0, kein leeres Tupel, keine Leerzeichenkette, oder irgend einen anderen Wert die bei `bool()` das Ergebnis `False` liefert, in dem Baum speichern.