In der nicht recursiven Durchquerung des Vorrangs des Vorlagens ist der Post -Order am problematischsten. im Stapel aufbewahrt werden.
Es gibt viele Methoden.
Kopieren Sie den Code -Code wie folgt:
Typedef struct {node * p;
LastOrderTraverse (bitree bt) {
// Beginnen Sie zunächst vom Stammknoten, gehen Sie nach links nach unten, gehen Sie zum Kopf und geben Sie jeden Knoten auf den Pfad in den Stapel ein.
p = bt;
While (bt)
Push (BT, 0);
bt = bt.lchild;
}
// dann in den Zykluskörper eingeben
While (! Stack.empty ()) {// solange der Stapel nicht leer ist
sn = stack.gettop ();
// Beachten Sie, dass jeder Knoten n, solange es ein linkes Kind hat, nach N in den Stapel eingetreten ist, muss das linke Kind von n dem Stapel folgen (dies spiegelt sich in der zweiten Hälfte des Algorithmus wider), also wenn wir das bekommen Stapel Wenn das obere Element, können Sie sicher sein, dass dieses Element entweder kein linkses Kind hat oder auf sein linkes Kind zugegriffen wurde. Zu diesem Zeitpunkt kümmern wir uns also nicht um das linke Kind, wir kümmern uns nur um das rechte Kind.
// Wenn auf das richtige Kind zugegriffen wurde oder auf das Element nicht das richtige Kind hat, kann die Definition des Post -Sequenty -Traverses zu diesem Zeitpunkt auf den Besuchsknoten gereist werden.
if (!
p = pop ();
Besuch (p);
}
Ansonsten // Wenn sein richtiges Kind existiert und das Riegeln ist, bedeutet dies, dass das richtige Kind, das nicht umgezogen ist, vorher nicht bewegt wurde, also wird er mit seinem rechten Kind umgehen.
{{{{
// Zu diesem Zeitpunkt müssen wir vom Knoten des rechten Kindes bis zum Ende links nach unten nach unten gehen und alle Knoten auf diesen Pfad in den Stapel legen.
// Setzen Sie natürlich die Releved des Knoten Element des Stapels für einen Besuch). Es ist zu erkennen, dass das richtige Kind von Besuch übergeben werden muss, sodass das REFREID auf 1 festgelegt werden kann, wenn sich das Element oben am Stapel befindet.
sn.rvised = 1;
// Gehen Sie zum Ende nach unten links und legen Sie alle Elemente auf den Pfad in den Stapel
p = sn.p.rchild;
While (p! = 0) {
Push (p, 0);
p = p.lchild;
}
} // Dieser Zyklus ist beendet.
}
}