কম্পিউটার

একটি প্রদত্ত বাইনারি গাছের পোস্টঅর্ডার নন-রিকারসিভ ট্রাভার্সাল করার জন্য C++ প্রোগ্রাম


যদি একটি বাইনারি গাছ পোস্ট-অর্ডার অতিক্রম করা হয়, বাম উপ-বৃক্ষটি প্রথমে পরিদর্শন করা হয়, তারপর ডান উপ-বৃক্ষ এবং পরে মূলটি। এটি পুনরাবৃত্তি ছাড়াই পোস্ট অর্ডার ট্রি ট্রাভার্সালের জন্য একটি C++ প্রোগ্রাম। আমরা এখানে স্ট্যাক ব্যবহার করে প্রোগ্রামটি করি।

অ্যালগরিদম

পোস্টঅর্ডার ট্রাভার্সালের জন্য:

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

  1. প্রদত্ত বাইনারি ট্রির প্রি-অর্ডার নন-রিকারসিভ ট্রাভার্সাল করার জন্য C++ প্রোগ্রাম

  2. একটি প্রদত্ত বাইনারি গাছের পোস্টঅর্ডার রিকার্সিভ ট্রাভার্সাল করার জন্য C++ প্রোগ্রাম

  3. একটি প্রদত্ত বাইনারি ট্রির ইনঅর্ডার রিকার্সিভ ট্রাভার্সাল করার জন্য C++ প্রোগ্রাম

  4. প্রদত্ত বাইনারি গাছের প্রি-অর্ডার রিকার্সিভ ট্রাভার্সাল করার জন্য C++ প্রোগ্রাম