यदि एक बाइनरी ट्री को पोस्ट-ऑर्डर किया जाता है, तो पहले लेफ्ट सबट्री, फिर राइट सब-ट्री और बाद में रूट का दौरा किया जाता है। यह बिना रिकर्सन के पोस्ट ऑर्डर ट्री ट्रैवर्सल के लिए एक सी ++ प्रोग्राम है। हम यहां स्टैक का उपयोग करके प्रोग्राम करते हैं।
एल्गोरिदम
पोस्टऑर्डर ट्रैवर्सल के लिए:
Begin Declare postorder_traversal(struct node*t,struct tree**top) if(t==NULL) then print “Empty Tree”. Return. Print “Postorder Data Using Stack :”. Call push(t,top) function to insert values. Declare a pointer store against tree structure. Initialize struct tree*store=NULL. while(t!=NULL) store=*top; if(store->v==0) then if(t->r!=NULL) then (store->v)++ push(t->r,top) if(t->l!=NULL) then (store->v)++ push(t->l,top) if(store->v==0) then cout<d t=NULL pop(top) else cout<d t=NULL pop(top) if(*top!=NULL) then t=(*top)->link End
उदाहरण
#include<iostream> #include<stdlib.h> using namespace std; struct node { int d; struct node *l,*r; }; struct tree { int v; struct node*link; struct tree*n; }; struct node*create_node(int); struct node*create_node(int value) { struct node*new_node=(struct node*)malloc(sizeof(struct node)); if(new_node!=NULL) { new_node->d=value; new_node->l=new_node->r=NULL; return new_node; } else { printf("\n Memory overflow."); return NULL; } } void push(struct node*,struct tree*); void push(struct node*node,struct tree**top) { struct tree*new_node=(struct tree*)malloc(sizeof(struct tree)); if(new_node!=NULL) { new_node->link=node; new_node->n=*top; new_node->v=0; *top=new_node; } else { cout<<"\n Memory overflow."; return ; } } void pop(struct tree**); void pop(struct tree**top) { if(*top!=NULL) { struct tree*remove=*top; *top=(*top)->n; remove->link=NULL; remove->n=NULL; remove=NULL; } } void postorder_traversal(struct node*,struct tree**); void postorder_traversal(struct node*t,struct tree**top) { if(t==NULL) { cout<<"\n Empty Tree"; return; } cout<<"\n Postorder Data Using Stack :"; push(t,top); struct tree*store=NULL; while(t!=NULL) { store=*top; if(store->v==0) { if(t->r!=NULL) { (store->v)++; push(t->r,top); } if(t->l!=NULL) { (store->v)++; push(t->l,top); } if(store->v==0) { cout<<t->d; t=NULL; pop(top); } } else { cout<<t->d; t=NULL; pop(top); } if(*top!=NULL) t=(*top)->link; } } int main(){ struct node*root=NULL; struct tree*top=NULL; root = create_node(20); root->l = create_node(10); root->r = create_node(30); root->r->r = create_node(7); root->l->l = create_node(25); root->l->r = create_node(35); root->l->r->r = create_node(40); root->l->l->r = create_node(26); postorder_traversal(root,&top); return 0; }
आउटपुट
Postorder Data Using Stack :26 25 40 35 10 7 30 20