BINARY TREE TRAVERSALS.

#include<stdio.h>
#include<stdlib.h>
struct NODE {
struct NODE *pleft,*pright;
int ch;
};
struct NODE *proot;
int top=-1,n;
struct NODE * stack[50];
void push(struct NODE * r){
stack[++top]=r;
return ;
}
struct NODE *pop(){
struct NODE * k;
if(top<0)
k=NULL;
else{
k=stack[top];
top--;
}
return k;
}
struct NODE* insert(struct NODE* proot, int v)
{
    if(proot==NULL)
    {
        proot = (struct NODE*) malloc(sizeof(struct NODE));
        proot->ch = v;
        proot->pleft = NULL;
        proot->pright = NULL;
    }
    else if(v < proot->ch){
        proot->pleft = insert(proot->pleft, v);
    }
    else {
        proot->pright = insert(proot->pright, v);
    }
    return proot;

}

void inorder(struct NODE *proot){
if(proot){
inorder(proot->pleft);
printf("%d\t",proot->ch);
inorder(proot->pright);
}
}
void preorder(struct NODE * proot){
 if(proot){
    printf("%d\t",proot->ch);
  preorder(proot->pleft);
  preorder(proot->pright);
 }
}
void postorder(struct NODE * proot){
 if(proot){
  postorder(proot->pleft);
  postorder(proot->pright);
    printf("%d\t",proot->ch);
}
}

void Inorder(struct NODE *proot)
{
int i,done=0;
struct NODE *ptr=proot;
if(!proot)
printf("Empty tree\n");
else{
while(done == 0){
if(ptr){
push(ptr);
ptr=ptr->pleft;
}
else{
if(top >= 0){
ptr=pop();
printf("%d\t",ptr->ch);
ptr=ptr->pright;
}
else
done=1;
}
}
}
return ;
}

void Preorder(struct NODE *proot)
{
struct NODE *ptr=proot;
push(ptr);
while(top>=0){
ptr=pop();
printf("%d\t",ptr->ch);
if(ptr->pright != NULL)
push(ptr->pright);
if(ptr->pleft != NULL)
push(ptr->pleft);
}
}

void Postorder(struct NODE *proot)
{
struct NODE *s[n],*ptr=proot;
int to=-1;
top=0;
stack[top]=proot;
while(top!=-1){
ptr=stack[top];
top--;
to++;
s[to]=ptr;
if(ptr->pleft != NULL)
stack[++top]=ptr->pleft;
if(ptr->pright != NULL)
stack[++top]=ptr->pright;
}
while(to!=1){
ptr=s[to];
printf("%d\t",ptr->ch);
to--;
}
}

int main(){
proot=NULL;
printf("Enter # of elements :\n");
int i,n,v;
scanf("%d",&n);
printf("Enter the elements :\n");
for(int i=0; i<n; i++){
        scanf("%d", &v);
        proot = insert(proot, v);
    }
printf("\nInorder :\n");
inorder(proot);
Inorder(proot);
printf("\nPreorder :\n");
preorder(proot);
Preorder(proot);
printf("\nPostorder :\n");
postorder(proot);
Postorder(proot);
return 0;
}

Comments