logo

Postorder Traversal van binaire boom

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

Het passeren van postwissels



Algoritme voor postorder-doorgang van binaire boom:

Het algoritme voor postorder-traversal wordt als volgt weergegeven:

Postwissel (root):

  1. Volg stap 2 tot en met 4 tot root != NULL
  2. Postorder (root -> links)
  3. Postorder (root -> rechts)
  4. Schrijf root -> gegevens
  5. Einde lus

Hoe werkt postorder-traversal van binaire boom?

Beschouw de volgende boom:



Voorbeeld van binaire 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

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

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

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

Knooppunt 6 wordt bezocht

Stap 5: Alle subbomen van knooppunt 3 worden doorlopen. Dus nu wordt knooppunt 3 bezocht.

Knooppunt 3 wordt bezocht

Knooppunt 3 wordt bezocht

java int naar string

Stap 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 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

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