logo

Traversatie van postorders

In dit artikel bespreken we de postorder-traversal in de datastructuur.

Lineaire datastructuren zoals stack, array, wachtrij, etc. hebben maar één manier om de data te doorkruisen. Maar in een hiërarchische gegevensstructuur zoals boom , zijn er meerdere manieren om de gegevens te doorkruisen. Hier zullen we dus een andere manier bespreken om de boomdatastructuur te doorkruisen, d.w.z. postorderverkeer . De postorder-traversal is een van de traverseringstechnieken die worden gebruikt om het knooppunt in de boom te bezoeken. Het volgt het principe LRN (links-rechts-knooppunt) . Postorder traversal wordt gebruikt om de postfix-expressie van een boom te verkrijgen.

De volgende stappen worden gebruikt om de postorder-traversal uit te voeren:

  • Doorloop de linker deelboom door de postorderfunctie recursief aan te roepen.
  • Doorloop de rechter deelboom door de postorderfunctie recursief aan te roepen.
  • Toegang tot het gegevensgedeelte van het huidige knooppunt.

De postordertraversaltechniek volgt de Links Rechts Wortel beleid. Hier betekent Left Right Root dat eerst de linker subboom van het hoofdknooppunt wordt doorlopen, dan de rechter subboom en ten slotte het hoofdknooppunt. Hier suggereert de naam Postorder zelf dat het hoofdknooppunt van de boom eindelijk zou worden doorkruist.

tekenreeksen java toevoegen

Algoritme

Laten we nu eens kijken naar het algoritme van postorder-traversal.

 Step 1: Repeat Steps 2 to 4 while TREE != NULL Step 2: POSTORDER(TREE -> LEFT) Step 3: POSTORDER(TREE -> RIGHT) Step 4: Write TREE -> DATA [END OF LOOP] Step 5: END 

Voorbeeld van postordertransactie

Laten we nu een voorbeeld bekijken van postorder-traversal. Het zal gemakkelijker zijn om het proces van postorder-traversal te begrijpen aan de hand van een voorbeeld.

Traversatie van postorders

De knooppunten met gele kleur zijn nog niet bezocht. Nu zullen we de knooppunten van de bovenstaande boom doorkruisen met behulp van postorder-traversal.

  • Hier is 40 het hoofdknooppunt. We bezoeken eerst de linker subboom van 40, d.w.z. 30. Knooppunt 30 zal ook in postvolgorde doorlopen. 25 is de linker subboom van 30, dus deze wordt ook in de postorder doorlopen. Dan is 15 de linker deelboom van 25. Maar 15 heeft dus geen deelboom afdrukken 15 en ga naar de rechter deelboom van 25.
    Traversatie van postorders
  • 28 is de rechter deelboom van 25 en heeft geen kinderen. Dus, afdrukken 28 .
    Traversatie van postorders
  • Nu, afdrukken 25 , en de postorder-traversal voor 25 is klaar.
    Traversatie van postorders
  • Ga vervolgens naar de rechter deelboom van 30. 35 is de rechter deelboom van 30 en heeft geen kinderen. Dus, afdrukken 35 .
    Traversatie van postorders
  • Daarna, afdrukken 30 , en de postorder-traversal voor 30 is klaar. Dus de linker subboom van een gegeven binaire boom wordt doorlopen.
    Traversatie van postorders
  • Ga nu naar de rechter subboom van 40, dat is 50, en deze zal ook in de postvolgorde doorlopen. 45 is de linkerdeelboom van 50 en heeft geen kinderen. Dus, afdrukken 45 en ga naar de rechter deelboom van 50.
    Traversatie van postorders
  • 60 is de rechter subboom van 50, die ook in de postvolgorde zal worden doorlopen. 55 is de linkerdeelboom van 60 die geen kinderen heeft. Dus, afdrukken 55 .
    Traversatie van postorders
  • Nu, afdrukken 70, dat is de rechter deelboom van 60.
    Traversatie van postorders
  • Nu, afdrukken 60, en de postordertransactie voor 60 is voltooid.
    Traversatie van postorders
  • Nu, afdrukken 50, en de postordertransactie voor 50 is voltooid.
    Traversatie van postorders
  • Eindelijk, afdrukken 40, dat is het hoofdknooppunt van de gegeven binaire boom, en de postorder-doorgang voor knooppunt 40 is voltooid.
    Traversatie van postorders

De uiteindelijke output die we krijgen na postorder-traversal is -

Java-wiskunde

{15, 28, 25, 35, 30, 45, 55, 70, 60, 50, 40}

Complexiteit van het postorderverkeer

De tijdscomplexiteit van postorder-traversal is Op) , waarbij 'n' de grootte van de binaire boom is.

Terwijl de ruimtecomplexiteit van postorder-traversal dat wel is O(1) , als we geen rekening houden met de stapelgrootte voor functieaanroepen. Anders is de ruimtecomplexiteit van postorder-traversal dat wel Oh) , waarbij 'h' de hoogte van de boom is.

Implementatie van postordertraversal

Laten we nu eens kijken naar de implementatie van postorder traversal in verschillende programmeertalen.

Programma: Schrijf een programma om postorder traversal in C-taal te implementeren.

doe while loop java
 #include #include struct node { s struct node* left; struct node* right; }; /*To create a new node*/ struct node* createNode(int val) { struct node* Node = (struct node*)malloc(sizeof(struct node)); Node->element = val; Node->left = NULL; Node->right = NULL; return (Node); } /*function to traverse the nodes of binary tree in postorder*/ void traversePostorder(struct node* root) { if (root == NULL) return; traversePostorder(root->left); traversePostorder(root->right); printf(' %d ', root->element); } int main() { struct node* root = createNode(40); root->left = createNode(30); root->right = createNode(50); root->left->left = createNode(25); root->left->right = createNode(35); root->left->left->left = createNode(15); root->left->left->right = createNode(28); root->right->left = createNode(45); root->right->right = createNode(60); root->right->right->left = createNode(55); root->right->right->right = createNode(70); printf('
 The Postorder traversal of given binary tree is -
'); traversePostorder(root); return 0; } 

Uitvoer

Traversatie van postorders

Programma: Schrijf een programma om postorder traversal in C++ te implementeren.

 #include using namespace std; struct node { int element; struct node* left; struct node* right; }; /*To create a new node*/ struct node* createNode(int val) { struct node* Node = (struct node*)malloc(sizeof(struct node)); Node-&gt;element = val; Node-&gt;left = NULL; Node-&gt;right = NULL; return (Node); } /*function to traverse the nodes of binary tree in postorder*/ void traversePostorder(struct node* root) { if (root == NULL) return; traversePostorder(root-&gt;left); traversePostorder(root-&gt;right); cout&lt;<' '<element<left="createNode(28);" root->right = createNode(48); root-&gt;left-&gt;left = createNode(23); root-&gt;left-&gt;right = createNode(33); root-&gt;left-&gt;left-&gt;left = createNode(13); root-&gt;left-&gt;left-&gt;right = createNode(26); root-&gt;right-&gt;left = createNode(43); root-&gt;right-&gt;right = createNode(58); root-&gt;right-&gt;right-&gt;left = createNode(53); root-&gt;right-&gt;right-&gt;right = createNode(68); cout&lt;<'
 the postorder traversal of given binary tree is -
'; traversepostorder(root); return 0; } < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/85/postorder-traversal-14.webp" alt="Postorder Traversal"> <p> <strong>Program:</strong> Write a program to implement postorder traversal in C#.</p> <pre> using System; class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class BinaryTree { Node root; BinaryTree() { root = null; } void traversePostorder(Node node) { if (node == null) return; traversePostorder(node.left); traversePostorder(node.right); Console.Write(node.value + &apos; &apos;); } void traversePostorder() { traversePostorder(root); } static void Main() { BinaryTree bt = new BinaryTree(); bt.root = new Node(37); bt.root.left = new Node(27); bt.root.right = new Node(47); bt.root.left.left = new Node(22); bt.root.left.right = new Node(32); bt.root.left.left.left = new Node(12); bt.root.left.left.right = new Node(25); bt.root.right.left = new Node(42); bt.root.right.right = new Node(57); bt.root.right.right.left = new Node(52); bt.root.right.right.right = new Node(67); Console.WriteLine(&apos;The Postorder traversal of given binary tree is - &apos;); bt.traversePostorder(); } } </pre> <p> <strong>Output</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/85/postorder-traversal-15.webp" alt="Postorder Traversal"> <p> <strong>Program:</strong> Write a program to implement postorder traversal in Java.</p> <pre> class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class PostorderTraversal { Node root; PostorderTraversal() { root = null; } void traversePostorder(Node node) { if (node == null) return; traversePostorder(node.left); traversePostorder(node.right); System.out.print(node.value + &apos; &apos;); } void traversePostorder() { traversePostorder(root); } public static void main(String args[]) { PostorderTraversal pt = new PostorderTraversal(); pt.root = new Node(36); pt.root.left = new Node(26); pt.root.right = new Node(46); pt.root.left.left = new Node(21); pt.root.left.right = new Node(31); pt.root.left.left.left = new Node(11); pt.root.left.left.right = new Node(24); pt.root.right.left = new Node(41); pt.root.right.right = new Node(56); pt.root.right.right.left = new Node(51); pt.root.right.right.right = new Node(66); System.out.println(); System.out.println(&apos;The Postorder traversal of given binary tree is - &apos;); pt.traversePostorder(); System.out.println(); } } </pre> <p> <strong>Output</strong> </p> <p>After the execution of the above code, the output will be -</p> <img src="//techcodeview.com/img/ds-tutorial/85/postorder-traversal-16.webp" alt="Postorder Traversal"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <hr></'
></'>

Uitvoer

handmatig testen

Na de uitvoering van de bovenstaande code zal de uitvoer zijn:

Traversatie van postorders

Programma: Schrijf een programma om postorder traversal in Java te implementeren.

 class Node { public int value; public Node left, right; public Node(int element) { value = element; left = right = null; } } class PostorderTraversal { Node root; PostorderTraversal() { root = null; } void traversePostorder(Node node) { if (node == null) return; traversePostorder(node.left); traversePostorder(node.right); System.out.print(node.value + &apos; &apos;); } void traversePostorder() { traversePostorder(root); } public static void main(String args[]) { PostorderTraversal pt = new PostorderTraversal(); pt.root = new Node(36); pt.root.left = new Node(26); pt.root.right = new Node(46); pt.root.left.left = new Node(21); pt.root.left.right = new Node(31); pt.root.left.left.left = new Node(11); pt.root.left.left.right = new Node(24); pt.root.right.left = new Node(41); pt.root.right.right = new Node(56); pt.root.right.right.left = new Node(51); pt.root.right.right.right = new Node(66); System.out.println(); System.out.println(&apos;The Postorder traversal of given binary tree is - &apos;); pt.traversePostorder(); System.out.println(); } } 

Uitvoer

Na de uitvoering van de bovenstaande code zal de uitvoer zijn:

Traversatie van postorders

Dus dat is alles over het artikel. Ik hoop dat het artikel nuttig en informatief voor u zal zijn.