POSTORDER_next
-
Binary tree ohne parent-Zeiger, iterativ, keine Marker.
Hat da jemand eine Quelle? Irgendwie kann man bei Google nichts finden ohne parent-Zeiger ?! Oder ich bin blind...
MfG SideWinder
-
Falls es hilft: Ist eigetnlich ein threaded binary tree.
MfG SideWinder
-
wenn ich mir das bilchen auf http://www.coder-wiki.de/Algorithmen/Traversierung-preOrdner anschaue und überlegen, wie ich ohne speicher preorder_next(E) finden soll, geb ich gleich auf.
edit: threaded ist er also. aber threaded kann viel bedeuten. am einfachten wärs, wenn er so gethreaded wäre, daß jeder knoten einen zeiger auf sein preorder_next hat.
-
SideWinder schrieb:
Falls es hilft: Ist eigetnlich ein threaded binary tree.
Threaded im Sinne von "statt null-zeiger haben die Blätter Zeiger auf in-order-Nachbarn"? Falls ja, könnte folgendes funktionieren (Pseudocode):
next_preorder(Node v) { if(v.has_left_child()) return v.left; if(v.has_right_child()) return v.right; Node w = v.right; // in-order-Nachfolger von v while(w && !w.has_right_child()) w = w.right; // in-order-Nachfolger von w if(!w) return NO_SUCCESSOR; return w.right; }
v.has_right_child() soll dabei true sein genau dann, wenn der pointer "v.right" kein Fädel-Zeiger ist.
Ich kann nicht sagen, ob das so funktioniert (ungetestet) aber vielleicht geht es ja in die richtige Richtung.
-
@voikard: preorder_next habe ich sogar selbst geschafft *freu* Leider ist er nicht preorder-gethreaded
Er ist inorder-gethreaded.
@Christoph: Danke für den Ansatz (oder die Lösung), ich werde mir das sofort genauer ansehen.
MfG SideWinder
-
Ach damn. Entschuldige Christoph. Entschuldigung an alle. Ich suche postorder_next
MfG SideWinder
-
habs ein wenig versucht und alles war nicht hübsch.
mir scheint, es läuft alles darauf hinaus, daß gelegrntlich in den fallunterscheidungen folgende schleife auftaucht, die ich netterweise auslagere:Knoten* getParent(Knoten* pos) { assert(pos!=root); Knoten* parent=pos; while(parent->left!=pos && parent->right!=pos) pos=pos->next; return pos: }
-
Danke, ich glaube ich habe nun im Knuth etwas gefunden. Kann es sein, dass der mein Verständnis von Postorder als Endorder bezeichnet und sein Postorder ein Inorder darstellt?
MfG SideWinder
-
Der Algorithmus im Knuth funktioniert nicht, Spitze. Ich hoffe ich krieg nun einen dieser $2,xx-Schecks.
Hab aber auf Basis von ihm einen Algorithmus entwickeln können der funktioniert. Muss ihn noch ausgiebig testen.
Besten Dank für eure Hinweise.
MfG SideWinder