Expression Tree Creation and Traversal
Expression Tree Creation and Traversal
#include<stdlib.h>
class node{
public :
char data;
node *left,*right;
node(char x) //Constructor
data=x;
left=right=NULL;
};
class Stack
node *data[30];
int top;
public:
Stack()
{ top = -1;}
int empty()
if(top==-1)
return 1;
return 0;
data[++top]=p;
return (data[top--]);
};
public:
int arr[30];
int top;
stackint()
top=-1;
int empty()
if(top==-1)
return 1;
return 0;
int pop(){
return (arr[top--]);
};
class tree
node *root;
public:
tree()
node *rootval()
return root;
void non_rec_inorder();
void non_rec_preorder();
void non_rec_postorder();
};
void tree::create()
char exp[30];
node *temp,*temp1,*temp2;
Stack s;
char ch;
cin>>exp;
int i=0;
while((ch=exp[i])!='\0')
if(isalnum(ch))//operand
s.push(temp);
else //operator
temp2=s.pop();
temp1=s.pop();
temp=new node(ch);
temp->left=temp1;
temp->right=temp2;
s.push(temp);
i++;
root=s.pop();
if(T!=NULL)
{
inorder(T->left);
cout<<" "<<T->data;
inorder(T->right);
if(T!=NULL)
cout<<" "<<T->data;
preorder(T->left);
preorder(T->right);
if(T!=NULL)
postorder(T->left);
postorder(T->right);
cout<<" "<<T->data;
void tree::non_rec_inorder()
Stack s;
node *T = root;
cout<<"\n";
while(T!=NULL) //To reach to Left Most Node
s.push(T);
T=T->left;
while(!s.empty())
T=s.pop();
cout<<" "<<T->data;
T=T->right;
s.push(T);
T=T->left;
void tree::non_rec_postorder()
Stack s;
stackint s1;
int flag=0;
node *T = root;
cout<<"\n";
if(T==NULL){
return;
}
s.push(T);
s1.push(0);
T=T->left;
while(!s.empty())
T=s.pop();
flag=s1.pop();
if(flag!=0)
cout<<" "<<T->data;
else{
s.push(T);
s1.push(1);
T=T->right;
while(T!=NULL)
s.push(T);
s1.push(0);
T=T->left;
}
}
void tree::non_rec_preorder()
Stack s;
node *T = root;
cout<<"\n";
s.push(T);
cout<<" "<<T->data;
T=T->left;
while(!s.empty())
T=s.pop();
T=T->right;
while(T!=NULL)
cout<<" "<<T->data;
s.push(T);
T=T->left;
int main()
{
tree t1;
node *root1;
int x,op;
do{
cout<<"\n\n1)Create\n2)Preorder(recursive)\n3)Inorder(recursive)\n4)Postorder(recursive)\n5)Preo
rder(Non-recursive)\n6)Inorder(Non-recursive)\n7)Postorder(Non-recursive)\n8)Exit";
cin>>op;
switch(op)
case 1:
t1.create();
root1=t1.rootval();
break;
case 2:
cout<<"\nPreorder Traversal(Recursive)";
t1.preorder(root1);
break;
case 3:
cout<<"\nInorder Traversal(Recursive)";
t1.inorder(root1);
break;
case 4:
cout<<"\nPostorder Traversal(Recursive)";
t1.postorder(root1);
break;
case 5:
cout<<"\nPreorder Traversal(Non-Recursive)";
t1.non_rec_preorder();
break;
case 6:
cout<<"\nInorder Traversal(Non-Recursive)";
t1.non_rec_inorder();
break;
case 7:
cout<<"\nPostorder Traversal(Non-Recursive)";
t1.non_rec_postorder();
break;
case 8:
cout<<"Thank You!";
break;
default :
}while(op!=8);
return 0;