logo

Postordre-gjennomgang av binært tre

Postordregjennomgang er definert som en type kryssing av tre som følger Venstre-Høyre-Root-policyen slik at for hver node:

  • Det venstre undertreet krysses først
  • Deretter krysses det høyre undertreet
  • Til slutt krysses rotnoden til undertreet
Postordregjennomgang

Postordregjennomgang



Algoritme for postordergjennomgang av binært tre:

Algoritmen for postordre-traversering vises som følger:

Postordre (root):

  1. Følg trinn 2 til 4 til root != NULL
  2. Postordre (root -> venstre)
  3. Postordre (root -> høyre)
  4. Skriv root -> data
  5. Sluttløkke

Hvordan fungerer Postorder Traversal of Binary Tree?

Tenk på følgende tre:



Eksempel på binært tre

Eksempel på binært tre

Hvis vi utfører en postorder-traversering i dette binære treet, vil traverseringen være som følger:

Trinn 1: Traverseringen vil gå fra 1 til venstre undertre dvs. 2, deretter fra 2 til venstre undertrerot, dvs. 4. Nå har 4 ikke noe undertre, så det vil bli besøkt.



Node 4 er besøkt

Node 4 er besøkt

Steg 2: Ettersom venstre undertre av 2 besøkes fullstendig, vil det nå krysse høyre undertre av 2, dvs. det vil flytte til 5. Siden det ikke er noe undertre på 5, vil det bli besøkt.

java-strengformat
Node 5 er besøkt

Node 5 er besøkt

Trinn 3: Nå er både venstre og høyre undertre av node 2 besøkt. Så besøk node 2 selv.

Node 2 er besøkt

Node 2 er besøkt

Trinn 4: Når det venstre undertreet til node 1 krysses, vil det nå flytte til høyre undertrerot, dvs. 3. Node 3 har ikke noe venstre undertre, så det vil krysse det høyre undertreet, dvs. 6. Node 6 har ikke noe undertre og så det er besøkt.

Node 6 er besøkt

Node 6 er besøkt

Trinn 5: Alle undertrærne til node 3 krysses. Så nå er node 3 besøkt.

Node 3 er besøkt

Node 3 er besøkt

Trinn 6: Ettersom alle undertrærne til node 1 krysses, er det nå på tide at node 1 skal besøkes og kryssingen avsluttes etter det når hele treet krysses.

Hele treet er besøkt

Hele treet er besøkt

Så rekkefølgen for kryssing av noder er 4 -> 5 -> 2 -> 6 -> 3 -> 1 .

Program for å implementere Postorder Traversal of Binary Tree

Nedenfor er kodeimplementeringen av postordre-traverseringen:

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øyre);> >// 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øyre = ny node(5); root->right->right = ny node(6); // Function call cout<< 'Postorder traversal of binary tree is: '; printPostorder(root); return 0; }>

imessage-spill 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


xdxd betydning



# 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




testing og typer testing
// 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();>

>

>

Produksjon

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

Forklaring:

Hvordan postordreovergang fungerer

Hvordan postordreovergang fungerer

Kompleksitetsanalyse:

Tidskompleksitet: O(N) hvor N er det totale antallet noder. Fordi den krysser alle nodene minst én gang.
Hjelpeplass: O(1) hvis ingen rekursjonsstabelplass vurderes. Ellers O(h) hvor h er høyden på treet

  • I verste fall, h kan være det samme som N (når treet er et skjevt tre)
  • I beste fall, h kan være det samme som rolig (når treet er et komplett tre)

Bruk tilfeller av Postordre Traversal:

Noen brukstilfeller av postordreovergang er:

  • Dette brukes til tresletting.
  • Det er også nyttig å hente postfix-uttrykket fra et uttrykkstre.

Relaterte artikler:

  • Typer trekryssinger
  • Iterativ postordre-gjennomgang (ved bruk av to stabler)
  • Iterativ postordre-gjennomgang (ved bruk av én stabel)
  • Postordre av Binary Tree uten rekursjon og uten stabel
  • Finn Postorder-traversering av BST fra preorder-traversal
  • Morris-traversering for postordre
  • Skriv ut postordre-traversal fra forhåndsbestilt og inorder-traversal