Dabei ist jeder Knoten charakterisiert durch einen Index (hier von 21 bis 29) und enthält genau 2 Zahlen (eingeschlossen in []), und eine Zahl ist entweder wieder ein Index von 21 bis 29 oder nil(< 0). Die Wurzel 21 hat bspw. das linke Kind 22 und als rechtes 23. Mein rotate sieht so aus: rotate := proc(LeRi) begin sav := tree[LeRi[1]][1]: tree[LeRi[1]][1] := tree[LeRi[1]][2]: tree[LeRi[1]][2] := LeRi[2]: if sav = nil then LeRi[2] := nil: // iff else LeRi[2] := LeRi[1]: LeRi[1] := sav: end_if: return(LeRi): end_proc: Das ist Deinem rotate so genau wie möglich nachempfunden: Das Argument LeRi[1] entspricht *cur und LeRi[2] *prv. Im Unterschied zu C kann man mehrteilige Objekte zurückgeben, also hier wieder LeRi[1] und LeRi[2]. Das Setzen des Anfangsknotens ist bspw. LeRi := [21,-3]: // für die Wurzel, oder für den kleinen Test LeRi := [25,-3]: Damit läuft die Wirbeltraversierung: s := 0: while LeRi[1] >= 0 do: s := s+1: print(s,LeRi): LeRi := rotate(LeRi): end_while: // mit der Ausgabe beim kleinen Test: 1, [25, -3] 2, [25, -1] 3, [27, 25] 4, [27, -1] 5, [27, -1] 6, [25, 27] Für den ganzen Baum LeRi:=[21,-3]: s:=0: erhalte ich die Ausgabe: 1, [21, -3] 2, [22, 21] 3, [24, 22] 4, [24, -1] 5, [24, -1] 6, [22, 24] 7, [25, 22] 8, [25, -1] 9, [27, 25] 10, [27, -1] 11, [27, -1] 12, [25, 27] 13, [22, 25] 14, [21, 22] 15, [23, 21] 16, [26, 23] 17, [28, 26] 18, [28, -1] 19, [28, -1] 20, [26, 28] 21, [29, 26] 22, [29, -1] 23, [29, -1] 24, [26, 29] 25, [23, 26] 26, [23, -1] Ein Fehler, wie du ihn beschreibst, müsste nach meiner Deutung einem Knotenindex ≥0, aber außerhalb [21,29] entsprechen. Ich hoffe, Du kannst das unschwer nachvollziehen und grüße Dich - Nomen4Omen 15:25, 6. Apr. 2020 (CEST)