logo

Postorder-Durchquerung des Binärbaums

Durchquerung von Postanweisungen ist als eine Art von definiert Baumdurchquerung Dies folgt der Left-Right-Root-Richtlinie, sodass für jeden Knoten Folgendes gilt:

  • Der linke Teilbaum wird zuerst durchlaufen
  • Anschließend wird der rechte Teilbaum durchlaufen
  • Abschließend wird der Wurzelknoten des Teilbaums durchlaufen
Durchquerung von Postanweisungen

Durchquerung von Postanweisungen



Algorithmus für die Postorder-Traversierung des Binärbaums:

Der Algorithmus für die Postorder-Traversierung wird wie folgt dargestellt:

Postanweisung (Wurzel):

  1. Befolgen Sie die Schritte 2 bis 4, bis root != NULL ist
  2. Postorder (root -> links)
  3. Postorder (root -> rechts)
  4. Root -> Daten schreiben
  5. Schleife beenden

Wie funktioniert die Postorder-Traversierung des Binärbaums?

Betrachten Sie den folgenden Baum:



Beispiel eines Binärbaums

Beispiel eines Binärbaums

Wenn wir in diesem Binärbaum eine Postorder-Traversierung durchführen, sieht die Traversierung wie folgt aus:

Schritt 1: Die Durchquerung erfolgt von 1 zu seinem linken Teilbaum, also 2, dann von 2 zu seiner linken Teilbaumwurzel, also 4. Jetzt hat 4 keinen Teilbaum, also wird er besucht.



Knoten 4 wird besucht

Knoten 4 wird besucht

Schritt 2: Da der linke Teilbaum von 2 vollständig besucht ist, durchläuft er nun den rechten Teilbaum von 2, d. h. er bewegt sich zu 5. Da es keinen Teilbaum von 5 gibt, wird er besucht.

Knoten 5 wird besucht

Knoten 5 wird besucht

Schritt 3: Nun werden sowohl der linke als auch der rechte Teilbaum von Knoten 2 besucht. Besuchen Sie nun Knoten 2 selbst.

Knoten 2 wird besucht

Knoten 2 wird besucht

Schritt 4: Wenn der linke Teilbaum von Knoten 1 durchquert wird, bewegt er sich nun zur rechten Teilbaumwurzel, d. h. 3. Knoten 3 hat keinen linken Teilbaum, also wird er den rechten Teilbaum durchqueren, d. h. 6. Knoten 6 hat keinen Teilbaum und also wird es besucht.

Knoten 6 wird besucht

Knoten 6 wird besucht

Schritt 5: Alle Teilbäume von Knoten 3 werden durchlaufen. Jetzt wird Knoten 3 besucht.

Knoten 3 wird besucht

Knoten 3 wird besucht

Schritt 6: Da alle Teilbäume von Knoten 1 durchquert werden, ist es nun an der Zeit, Knoten 1 zu besuchen, und die Durchquerung endet danach, wenn der gesamte Baum durchquert wird.

Der komplette Baum wird besichtigt

Der komplette Baum wird besichtigt

Die Reihenfolge der Knotendurchquerung ist also 4 -> 5 -> 2 -> 6 -> 3 -> 1 .

Programm zur Implementierung von Postorder Traversal of Binary Tree

Nachfolgend finden Sie die Code-Implementierung des Postorder-Traversals:

C++




// C++ program for postorder traversals> #include> using> namespace> std;> // Structure of a Binary Tree Node> struct> Node {> >int> data;> >struct> Node *left, *right;> >Node(>int> v)> >{> >data = v;> >left = right = NULL;> >}> };> // Function to print postorder traversal> void> printPostorder(>struct> Node* node)> {> >if> (node == NULL)> >return>;> >// First recur on left subtree> >printPostorder(node->links);> >// Then recur on right subtree> >printPostorder(node->rechts);> >// Now deal with the node> >cout ' '; } // Driver code int main() { struct Node* root = new Node(1); root->links = neuer Knoten(2); root->right = new Node(3); root->left->left = new Node(4); root->left->right = new Node(5); root->right->right = new Node(6); // Funktionsaufruf cout<< 'Postorder traversal of binary tree is: '; printPostorder(root); return 0; }>

>

>

Java




// Java program for postorder traversals> import> java.util.*;> // Structure of a Binary Tree Node> class> Node {> >int> data;> >Node left, right;> >Node(>int> v)> >{> >data = v;> >left = right =>null>;> >}> }> class> GFG {> > >// Function to print postorder traversal> >static> void> printPostorder(Node node)> >{> >if> (node ==>null>)> >return>;> >// First recur on left subtree> >printPostorder(node.left);> >// Then recur on right subtree> >printPostorder(node.right);> >// Now deal with the node> >System.out.print(node.data +>' '>);> >}> >// Driver code> >public> static> void> main(String[] args)> >{> >Node root =>new> Node(>1>);> >root.left =>new> Node(>2>);> >root.right =>new> Node(>3>);> >root.left.left =>new> Node(>4>);> >root.left.right =>new> Node(>5>);> >root.right.right =>new> Node(>6>);> >// Function call> >System.out.println(>'Postorder traversal of binary tree is: '>);> >printPostorder(root);> >}> }> // This code is contributed by prasad264>

>

>

Python3




# Python program for postorder traversals> # Structure of a Binary Tree Node> class> Node:> >def> __init__(>self>, v):> >self>.data>=> v> >self>.left>=> None> >self>.right>=> None> # Function to print postorder traversal> def> printPostorder(node):> >if> node>=>=> None>:> >return> ># First recur on left subtree> >printPostorder(node.left)> ># Then recur on right subtree> >printPostorder(node.right)> ># Now deal with the node> >print>(node.data, end>=>' '>)> # Driver code> if> __name__>=>=> '__main__'>:> >root>=> Node(>1>)> >root.left>=> Node(>2>)> >root.right>=> Node(>3>)> >root.left.left>=> Node(>4>)> >root.left.right>=> Node(>5>)> >root.right.right>=> Node(>6>)> ># Function call> >print>(>'Postorder traversal of binary tree is:'>)> >printPostorder(root)>

>

>

C#




str.substring in Java
// C# program for postorder traversals> using> System;> // Structure of a Binary Tree Node> public> class> Node {> >public> int> data;> >public> Node left, right;> >public> Node(>int> v)> >{> >data = v;> >left = right =>null>;> >}> }> public> class> GFG {> >// Function to print postorder traversal> >static> void> printPostorder(Node node)> >{> >if> (node ==>null>)> >return>;> >// First recur on left subtree> >printPostorder(node.left);> >// Then recur on right subtree> >printPostorder(node.right);> >// Now deal with the node> >Console.Write(node.data +>' '>);> >}> >static> public> void> Main()> >{> >// Code> >Node root =>new> Node(1);> >root.left =>new> Node(2);> >root.right =>new> Node(3);> >root.left.left =>new> Node(4);> >root.left.right =>new> Node(5);> >root.right.right =>new> Node(6);> >// Function call> >Console.WriteLine(> >'Postorder traversal of binary tree is: '>);> >printPostorder(root);> >}> }> // This code is contributed by karthik.>

>

>

Javascript




// Structure of a Binary Tree Node> class Node {> >constructor(v) {> >this>.data = v;> >this>.left =>null>;> >this>.right =>null>;> >}> }> // Function to print postorder traversal> function> printPostorder(node) {> >if> (node ==>null>) {> >return>;> >}> >// First recur on left subtree> >printPostorder(node.left);> >// Then recur on right subtree> >printPostorder(node.right);> >// Now deal with the node> >console.log(node.data +>' '>);> }> // Driver code> function> main() {> >let root =>new> Node(1);> >root.left =>new> Node(2);> >root.right =>new> Node(3);> >root.left.left =>new> Node(4);> >root.left.right =>new> Node(5);> >root.right.right =>new> Node(6);> >// Function call> >console.log(>'Postorder traversal of binary tree is: '>);> >printPostorder(root);> }> main();>

>

>

Ausgabe

Postorder traversal of binary tree is: 4 5 2 6 3 1>

Erläuterung:

So funktioniert die Durchquerung des Versandhandels

So funktioniert die Durchquerung des Versandhandels

Komplexitätsanalyse:

Zeitkomplexität: O(N) wobei N die Gesamtzahl der Knoten ist. Weil es alle Knoten mindestens einmal durchläuft.
Hilfsraum: O(1), wenn kein Rekursionsstapelplatz berücksichtigt wird. Ansonsten O(h), wobei h die Höhe des Baums ist

  • Im schlimmsten Fall, H kann dasselbe sein wie N (wenn der Baum ein schiefer Baum ist)
  • Im besten Fall, H kann dasselbe sein wie ruhig (wenn der Baum ein vollständiger Baum ist)

Anwendungsfälle von Postorder Traversal:

Einige Anwendungsfälle der Postorder-Traversierung sind:

  • Dies wird zum Löschen des Baums verwendet.
  • Es ist auch nützlich, den Postfix-Ausdruck aus einem Ausdrucksbaum abzurufen.

In Verbindung stehende Artikel:

  • Arten von Baumdurchquerungen
  • Iterative Postorder-Traversierung (mit zwei Stapeln)
  • Iterative Postorder-Durchquerung (mit einem Stapel)
  • Nachbestellung des Binärbaums ohne Rekursion und ohne Stapel
  • Finden Sie Postorder-Traversal von BST aus Preorder-Traversal
  • Morris-Durchquerung für den Versandhandel
  • Postorder-Traversal aus Preorder und Inorder-Traversal drucken