rendered paste body#include<iostream.h>#include<conio.h>#include<stdlib.h>struct Node{ Node *left; int data; Node *right;};const MAX=10;class Stack{ Node *a[MAX]; int top; public: Stack() { top=-1; } void Push(Node*); Node* Pop(void);};void Stack::Push(Node *item){ if(top==MAX-1) { cout << "stack is full"; return; } top++; a[top]=item;}Node* Stack::Pop(void){ if(top==-1) { cout << "STACK IS EMPTY"; return NULL; } Node *item=a[top]; top--; return item;}class Tree:Stack{ Node *t; public: Tree():Stack() { t=NULL; } void Insert(int); void PreOrder(void); void InOrder(void); void PostOrder(void);};void Tree::Insert(int item){ Node *jk=t,*save=t; while(jk!=NULL) { if(jk->data > item) { save=jk; jk=jk->left; } else if(jk->data < item) { save=jk; jk=jk->right; } else return; } Node *temp=new Node; temp->left=NULL; temp->data=item; temp->right=NULL; if(t==NULL) // if insertion at root node t=temp; else if(save->data > item) save->left=temp; else save->right=temp;}void Tree::PreOrder(void){ Push(NULL); // initialise the stack used for sentinal Node *jk=t; JAGGS: while(jk!=NULL) { cout << " " << jk->data; if(jk->right!=NULL) Push(jk->right); jk=jk->left; } jk=Pop(); if(jk!=NULL) goto JAGGS; else return;}void Tree::InOrder(void){ Push(NULL); Node *jk=t; JAGGS: while(jk!=NULL) { Push(jk); jk=jk->left; } jk=Pop(); while(jk!=NULL) { cout << " " << jk->data; if(jk->right!=NULL) { jk=jk->right; goto JAGGS; } else jk=Pop(); }}void Tree::PostOrder(void){ Push(NULL); Node *jk=t; JAGGS: while(jk!=NULL) { Push(jk); if(jk->right!=NULL) Push(-(jk->right)); jk=jk->left; } jk=Pop(); while(int(jk)>0) { cout << " " << jk->data; jk=Pop(); } if((int)jk<0) { jk=-jk; goto JAGGS; }}void main(){ Tree T; clrscr(); int num,cho=1,cnt; //char cho; cout << "HOW MANY ELEMENTS FOR TREE CONSTRUCTION\n"; cin >> cnt; while(cho<=cnt) { cin >> num; T.Insert(num); cho++; } cout << "\n\nPREORDER TRAVERSAL\n\n"; T.PreOrder(); cout << "\n\nINORDER TRAVERSAL\n\n"; T.InOrder(); getch();}