/* Try to loop up some right spine, i.e. all available left (grand)parents until there is none. */ if (N == next->L) /* N is the left child of next. */ // ↑-5P-4↑-4P-3↑-2P-1↑-3P0↑+1P+3 goto DU; /* N is the right child of next. */ N = next; /* N has a right child. */ // ↑-3↑+1↑+4↑+3↑0 printf("post-order: [%d] ", N->value); // N is in post-order position if ((next = N->P) // ↗-3P0↗+1P+3↗+4P+3↗+3P0↗0P– != anchor) /* N is not the root. */ // ↗-3P0↗+1P+3↗+4P+3↗+3P0 goto UL; /* N is the root. */ // ↗0P– return; } Zugegeben, der Algorithmus ist am kürzesten, wenn er goto enthält, und muss sehr sorgfältig durchgelesen werden. Ich habe ihn per einmaligem Traversieren des Baums in der figure "bewiesen". In ihm kommen alle charakteristischen Konstellationen vor. Im Hauptartikel bin ich auch weiter gekommen. Ich habe für pre-, in-, post-order traversal bei Pfaff etwas gefunden, was man als eine Art Definition auffassen kann. Im Effekt würde das bedeuten, dass nicht jede Traversierung mit einem der 3 Stempel versehen werden kann. Z.B. wäre die Dupliziertraversierung zwar eine Traversierung, könnte aber nicht als eine der 3 aufgefasst werden. Du hast ja sowas schon mal ausgesprochen. Mein volles iterativePreInPostOrder gehört sicherlich auch nicht da rein, obwohl man, wenn man kein in-order und kein post-order printf macht, es ein reines pre-order traversal ist. Gleiches scheint mir für wTrav zuzutreffen. Erwarte Deine Antwort. Gruß und bis bald. -- Nomen4Omen 20:44, 11. Mär. 2020 (CET)