Verwendung der Vorbestellungs-, In-Order- und Nachbestellungs-Traversal-Strategie
Bevor Sie verstehen können, unter welchen Umständen Vorbestellung, Reihenfolge und Nachbestellung für einen Binärbaum verwendet werden müssen, müssen Sie genau verstehen, wie jede Durchquerungsstrategie funktioniert. Verwenden Sie den folgenden Baum als Beispiel.
Die Wurzel des Baums ist 7 , der Knoten ganz links ist 0 , der Knoten ganz rechts ist 10 .
Durchlauf vorbestellen :
Zusammenfassung: Beginnt an der Wurzel ( 7 ) und endet am äußersten rechten Knoten ( 10 )
Durchlaufsequenz: 7, 1, 0, 3, 2, 5, 4, 6, 9, 8, 10
In-Order-Traversal :
Zusammenfassung: Beginnt am äußersten linken Knoten ( 0 ) und endet am äußersten rechten Knoten ( 10 )
Durchlaufsequenz: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Nachbestellungsdurchlauf :
Zusammenfassung: Beginnt mit dem Knoten ganz links ( 0 ) und endet mit der Wurzel ( 7 )
Durchlaufsequenz: 0, 2, 4, 6, 5, 3, 1, 8, 10, 9, 7
Wann ist Pre-Order, In-Order oder Post-Order zu verwenden?
Die vom Programmierer ausgewählte Durchlaufstrategie hängt von den spezifischen Anforderungen des zu entwerfenden Algorithmus ab. Das Ziel ist die Geschwindigkeit. Wählen Sie also die Strategie, mit der Sie die Knoten erhalten, die Sie am schnellsten benötigen.
Wenn Sie wissen, dass Sie die Wurzeln erforschen müssen, bevor Sie Blätter untersuchen, wählen Sie eine Vorbestellung, da Sie vor allen Blättern auf alle Wurzeln stoßen.
Wenn Sie wissen, dass Sie alle Blätter vor Knoten untersuchen müssen, wählen Sie Nachbestellung , da Sie keine Zeit damit verschwenden, Wurzeln bei der Suche nach Blättern zu untersuchen.
Wenn Sie wissen, dass der Baum eine inhärente Sequenz in den Knoten hat und Sie den Baum wieder in seine ursprüngliche Sequenz reduzieren möchten, sollte eine Durchquerung in der richtigen Reihenfolge verwendet werden. Der Baum würde auf die gleiche Weise abgeflacht, wie er erstellt wurde. Bei einem Durchlauf vor oder nach der Bestellung wird der Baum möglicherweise nicht in die Reihenfolge zurückgespult, in der er erstellt wurde.
Rekursive Algorithmen für Pre-Order, In-Order und Post-Order (C ++):
struct Node{
int data;
Node *left, *right;
};
void preOrderPrint(Node *root)
{
print(root->name); //record root
if (root->left != NULL) preOrderPrint(root->left); //traverse left if exists
if (root->right != NULL) preOrderPrint(root->right);//traverse right if exists
}
void inOrderPrint(Node *root)
{
if (root.left != NULL) inOrderPrint(root->left); //traverse left if exists
print(root->name); //record root
if (root.right != NULL) inOrderPrint(root->right); //traverse right if exists
}
void postOrderPrint(Node *root)
{
if (root->left != NULL) postOrderPrint(root->left); //traverse left if exists
if (root->right != NULL) postOrderPrint(root->right);//traverse right if exists
print(root->name); //record root
}