logo

Postorder Traversal of Binary Tree

Pasta pasūtījumu šķērsošana ir definēts kā veids koku šķērsošana kas atbilst kreisās-labās saknes politikai, lai katram mezglam:

  • Vispirms tiek šķērsots kreisais apakškoks
  • Pēc tam tiek šķērsots labais apakškoks
  • Visbeidzot, tiek šķērsots apakškoka saknes mezgls
Pasta pasūtījumu šķērsošana

Pasta pasūtījumu šķērsošana



Algoritms binārā koka pēcpārkāpšanai:

Algoritms pēc pasūtījuma apbraukšanai ir parādīts šādi:

Pasta pasūtījums (sakne):

  1. Izpildiet 2. līdz 4. darbību, līdz sakne != NULL
  2. Postorder (sakne -> pa kreisi)
  3. Postorder (sakne -> pa labi)
  4. Ierakstiet saknes -> datus
  5. Beigu cilpa

Kā darbojas binārā koka pēcpārbaude?

Apsveriet šādu koku:



Binārā koka piemērs

Binārā koka piemērs

Ja mēs šajā binārajā kokā veicam postorder šķērsošanu, tad šķērsošana būs šāda:

1. darbība: Apmeklēšana tiks veikta no 1 uz kreiso apakškoku, t.i., 2, pēc tam no 2 uz kreiso apakškoka sakni, t.i., 4. Tagad 4. apakškokam nav apakškoka, tāpēc tas tiks apmeklēts.



4. mezgls ir apmeklēts

4. mezgls ir apmeklēts

2. darbība: Tā kā 2. kreisais apakškoks ir pilnībā apmeklēts, tagad tas šķērsos 2. labo apakškoku, t.i., pārvietosies uz 5. Tā kā 5. apakškoka nav, tas tiks apmeklēts.

5. mezgls ir apmeklēts

5. mezgls ir apmeklēts

3. darbība: Tagad tiek apmeklēts gan 2. mezgla kreisais, gan labais apakškoks. Tāpēc tagad apmeklējiet pašu 2. mezglu.

2. mezgls ir apmeklēts

2. mezgls ir apmeklēts

4. darbība: Tā kā mezgla 1 kreisais apakškoks ir šķērsots, tas tagad pārvietosies uz labo apakškoka sakni, t.i., 3. 3. mezglā nav neviena kreisā apakškoka, tāpēc tas šķērsos labo apakškoku, t.i., 6. 6. mezglā nav apakškoka un tāpēc tas ir apmeklēts.

6. mezgls ir apmeklēts

6. mezgls ir apmeklēts

5. darbība: Tiek šķērsoti visi 3. mezgla apakškoki. Tātad tagad 3. mezgls ir apmeklēts.

3. mezgls ir apmeklēts

3. mezgls ir apmeklēts

6. darbība: Tā kā visi 1. mezgla apakškoki ir šķērsoti, tagad ir pienācis laiks apmeklēt mezglu 1, un šķērsošana beidzas pēc tam, jo ​​tiek šķērsots viss koks.

Tiek apmeklēts viss koks

Tiek apmeklēts viss koks

Tātad mezglu šķērsošanas secība ir 4 -> 5 -> 2 -> 6 -> 3 -> 1 .

Programma, lai īstenotu Postorder Traversal of Binary Tree

Tālāk ir norādīta pēcpasūtīšanas šķērsošanas koda ieviešana:

C++


kas ir java kaudze



// 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->pa kreisi);> >// Then recur on right subtree> >printPostorder(node->pa labi);> >// Now deal with the node> >cout ' '; } // Driver code int main() { struct Node* root = new Node(1); root->pa kreisi = jauns mezgls(2); sakne->pa labi = jauns mezgls (3); sakne->pa kreisi->pa kreisi = jauns mezgls(4); sakne->pa kreisi->pa labi = jauns mezgls(5); sakne->labais->pa labi = jauns mezgls(6); // Funkcijas izsaukums<< '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




# 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)>

>

java lasīt csv
>

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

>

java virknes konvertēšana uz veseliem skaitļiem

>

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();>

>

>

Izvade

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

Paskaidrojums:

Kā darbojas pasta pasūtījumu šķērsošana

Kā darbojas pasta pasūtījumu šķērsošana

Sarežģītības analīze:

Laika sarežģītība: O(N), kur N ir kopējais mezglu skaits. Jo tas vismaz vienu reizi šķērso visus mezglus.
Palīgtelpa: O(1), ja netiek ņemta vērā rekursijas steka vieta. Pretējā gadījumā O(h), kur h ir koka augstums

  • Sliktākajā gadījumā, h var būt tāds pats kā N (kad koks ir šķībs koks)
  • Labākajā gadījumā, h var būt tāds pats kā mierīgs (kad koks ir pilnīgs koks)

Postorder Traversal lietošanas gadījumi:

Daži pēcpasūtīšanas izmantošanas gadījumi ir šādi:

  • To izmanto koku dzēšanai.
  • Ir arī noderīgi iegūt postfix izteiksmi no izteiksmju koka.

Saistītie raksti:

  • Koku šķērsošanas veidi
  • Iteratīvs postorder šķērsojums (izmantojot divus stekus)
  • Iteratīvs postorder šķērsojums (izmantojot vienu kaudzi)
  • Binārā koka postorder bez rekursijas un bez kaudzes
  • Atrodiet BST postorder traversal no priekšpasūtīšanas šķērsošanas
  • Morisa šķērsošana pasūtījumam pa pastu
  • Drukājiet postorder traversal no preorder un inorder traversal