Postordregennemgang er defineret som en type trægennemgang som følger venstre-højre-rod-politikken, således at for hver node:
- Det venstre undertræ krydses først
- Derefter krydses det højre undertræ
- Til sidst krydses undertræets rodknude

Postordregennemgang
Algoritme for postorder-gennemgang af binært træ:
Algoritmen for postorder-gennemgang er vist som følger:
Postordre (rod):
- Følg trin 2 til 4 indtil root != NULL
- Postordre (rod -> venstre)
- Postordre (rod -> højre)
- Skriv root -> data
- Slut sløjfe
Hvordan fungerer Postorder Traversal of Binary Tree?
Overvej følgende træ:

Eksempel på binært træ
Hvis vi udfører en postorder traversal i dette binære træ, så vil gennemgangen være som følger:
Trin 1: Gennemgangen vil gå fra 1 til dets venstre undertræ, dvs. 2, derefter fra 2 til dets venstre undertrærod, dvs. 4. Nu har 4 ikke noget undertræ, så det vil blive besøgt.
Node 4 er besøgt
Trin 2: Da det venstre undertræ af 2 besøges fuldstændigt, vil det nu krydse det højre undertræ af 2, dvs. det vil flytte til 5. Da der ikke er noget undertræ på 5, vil det blive besøgt.
java streng formatNode 5 er besøgt
Trin 3: Nu er både venstre og højre undertræ af node 2 besøgt. Så besøg nu selve node 2.
Node 2 er besøgt
Trin 4: Når det venstre undertræ af node 1 krydses, vil det nu flytte til højre undertrærod, dvs. 3. Node 3 har ikke noget venstre undertræ, så det vil krydse det højre undertræ, dvs. 6. Node 6 har intet undertræ og så den bliver besøgt.
Node 6 er besøgt
Trin 5: Alle undertræerne i node 3 gennemløbes. Så nu er node 3 besøgt.
Node 3 er besøgt
Trin 6: Da alle undertræerne i node 1 gennemløbes, er det nu tid til, at node 1 skal besøges, og gennemkørslen slutter derefter, da hele træet krydses.
Hele træet er besøgt
Så rækkefølgen af krydsning af noder er 4 -> 5 -> 2 -> 6 -> 3 -> 1 .
Program til at implementere Postorder Traversal of Binary Tree
Nedenfor er kodeimplementeringen af postordre-gennemgangen:
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->venstre);> > // Then recur on right subtree> > printPostorder(node->højre);> > // Now deal with the node> > cout ' '; } // Driver code int main() { struct Node* root = new Node(1); root->venstre = ny node(2); root->right = ny node(3); root->venstre->venstre = ny node(4); root->venstre->højre = ny node(5); root->right->right = new Node(6); // Funktionskald cout<< 'Postorder traversal of binary tree is:
'; printPostorder(root); return 0; }> |
imessage spil på Android
>
>
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
hvor gammel er pete davidson
# 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.> |
arraylist sortering
>
>
Javascript
indsættelsessorteringsalgoritmer
// 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();> |
>
>Produktion
Postorder traversal of binary tree is: 4 5 2 6 3 1>
Forklaring:

Sådan fungerer postordregennemgang
Kompleksitetsanalyse:
Tidskompleksitet: O(N) hvor N er det samlede antal knudepunkter. Fordi den krydser alle noderne mindst én gang.
Hjælpeplads: O(1), hvis der ikke tages hensyn til et rekursionsstabelrum. Ellers O(h), hvor h er højden af træet
- I værste fald, h kan være det samme som N (når træet er et skævt træ)
- I bedste tilfælde, h kan være det samme som berolige (når træet er et komplet træ)
Brugstilfælde af Postorder Traversal:
Nogle anvendelsestilfælde af postordre-gennemkørsel er:
- Dette bruges til sletning af træer.
- Det er også nyttigt at hente postfix-udtrykket fra et udtrykstræ.
Relaterede artikler:
- Typer af trægennemløb
- Iterativ postordergennemgang (ved hjælp af to stakke)
- Iterativ postordre-gennemgang (ved hjælp af én stak)
- Postordre af binært træ uden rekursion og uden stak
- Find Postorder-gennemgang af BST fra preorder-gennemgang
- Morris traversal for postordre
- Udskriv postordre-gennemgang fra forudbestilt og inorder-gennemgang