Het passeren van postwissels wordt gedefinieerd als een soort boom doorkruisen die het Links-Rechts-Root-beleid volgt, zodat voor elk knooppunt:
- De linker deelboom wordt als eerste doorlopen
- Vervolgens wordt de rechter deelboom doorlopen
- Ten slotte wordt het hoofdknooppunt van de subboom doorlopen

Het passeren van postwissels
Algoritme voor postorder-doorgang van binaire boom:
Het algoritme voor postorder-traversal wordt als volgt weergegeven:
Postwissel (root):
- Volg stap 2 tot en met 4 tot root != NULL
- Postorder (root -> links)
- Postorder (root -> rechts)
- Schrijf root -> gegevens
- Einde lus
Hoe werkt postorder-traversal van binaire boom?
Beschouw de volgende boom:

Voorbeeld van binaire boom
Als we een postorder-traversal uitvoeren in deze binaire boom, zal de traversal als volgt zijn:
Stap 1: De verplaatsing gaat van 1 naar de linker subboom, d.w.z. 2, en vervolgens van 2 naar de linker subboomwortel, d.w.z. 4. Nu heeft 4 geen subboom, dus deze zal worden bezocht.
Knooppunt 4 wordt bezocht
Stap 2: Omdat de linker subboom van 2 volledig is bezocht, zal deze nu de rechter subboom van 2 doorkruisen, d.w.z. hij zal naar 5 gaan. Omdat er geen subboom van 5 is, zal deze worden bezocht.
Knooppunt 5 wordt bezocht
Stap 3: Nu worden zowel de linker als de rechter deelboom van knooppunt 2 bezocht. Bezoek dus nu knooppunt 2 zelf.
Knooppunt 2 wordt bezocht
Stap 4: Wanneer de linker subboom van knooppunt 1 wordt doorlopen, zal deze nu naar de rechter subboomwortel gaan, d.w.z. 3. Knooppunt 3 heeft geen linker subboom, dus zal het de rechter subboom doorkruisen, d.w.z. 6. Knooppunt 6 heeft geen subboom en dus het wordt bezocht.
Knooppunt 6 wordt bezocht
Stap 5: Alle subbomen van knooppunt 3 worden doorlopen. Dus nu wordt knooppunt 3 bezocht.
Knooppunt 3 wordt bezocht
java int naar stringStap 6: Omdat alle subbomen van knooppunt 1 zijn doorlopen, is het nu tijd om knooppunt 1 te bezoeken. Daarna eindigt het traject, omdat de hele boom is doorlopen.
De volledige boom wordt bezocht
De volgorde van het doorlopen van knooppunten is dus 4 -> 5 -> 2 -> 6 -> 3 -> 1 .
Programma om Postorder Traversal of Binary Tree te implementeren
Hieronder vindt u de code-implementatie van de postorder-traversal:
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 = nieuw knooppunt(2); root->right = nieuw knooppunt(3); root->left->left = nieuw knooppunt(4); root->links->rechts = nieuw knooppunt(5); root->right->right = nieuw knooppunt(6); // Functieoproep 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
Android-proces acore blijft stoppen
# 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#
// 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();> |
>
>Uitvoer
Postorder traversal of binary tree is: 4 5 2 6 3 1>
Uitleg:

Hoe postorderverkeer werkt
Complexiteitsanalyse:
Tijdcomplexiteit: O(N) waarbij N het totale aantal knooppunten is. Omdat het alle knooppunten minstens één keer doorkruist.
Hulpruimte: O(1) als er geen rekening wordt gehouden met recursiestapelruimte. Anders is O(h) waarbij h de hoogte van de boom is
- In het slechtste geval, H kan hetzelfde zijn als N (als de boom een scheve boom is)
- In het beste geval, H kan hetzelfde zijn als kalm (als de boom een complete boom is)
Gebruiksscenario's van Postorder Traversal:
Enkele gebruiksscenario's van postorder-traversal zijn:
- Dit wordt gebruikt voor het verwijderen van bomen.
- Het is ook handig om de postfix-expressie uit een expressieboom te halen.
Gerelateerde artikelen:
- Soorten boomtraversals
- Iteratieve postorder-traversal (met behulp van twee stapels)
- Iteratieve postorder-traversal (met behulp van één stapel)
- Postorder van binaire boom zonder recursie en zonder stapel
- Zoek Postorder-traversal van BST uit pre-order-traversal
- Morris-traversal voor postorder
- Afdrukken van postorder-traversal vanuit pre-order en in-order-traversal




