Threaded Binary Search Tree

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 5

//Threaded Binary Search tree

#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<stdlib.h>
int count=0;
typedef struct node node;
struct node
{
int data,lt,rt;
node* llink;
node* rlink;
};
void
void
void
node

preorder(node* );
inorder(node* );
postorder(node* );
*threading();

main(void)
{
int ch;
node *root=NULL;
do
{
printf("\n1:Create threaded BST tree\n2:Preorder\n3:Inorder\n4:Postorder\n5:Exit
\n");
scanf("%d",&ch);
switch(ch)
{
case 1:
root=threading();
break;
case 2:
preorder(root);
break;
case 3:
inorder(root);
break;
case 4:
postorder(root);
break;
case 5:
exit(0);
break;

}
}while(ch!=5);
getch();
}
node *threading()
{
int n,num,x=0;
node* root,*link,*link1,*temp;
printf("\nHow many nodes do you want ?\n");
scanf("%d",&n);
count=n;
root=(node*)malloc(sizeof(struct node));
printf("Enter the data\n");
scanf("%d",&(root->data));
root->rt=0;
root->lt=0;
root->llink=NULL;
root->rlink=NULL;
link=root;
n--;
while(n--)
{
printf("Enter the data\n");
scanf("%d",&num);
link=root;
while(link)
{
if((num>link->data)&&(link->rt!=1))
{
x=0;
link1=link;
link=link->rlink;
}
else if((num>link->data)&&(link->rt==1))
{
x=0;
link1=link;
link=link->rlink;
break;
}
else if((num<link->data)&&(link->lt!=1))
{
x=1;
link1=link;
link=link->llink;

}
else if((num<link->data)&&(link->lt==1))
{
x=1;
link1=link;
link=link->llink;
break;
}
//End of inner loop

if(x==0)

//for right branch

{
temp=(node*)malloc(sizeof(node));
temp->data=num;
temp->lt=1;
temp->llink=link1;
if(link1->rt==1)
{
temp->rlink=link1->rlink;
temp->rt=1;
link1->rt=0;
}
else
{
temp->rt=0;
temp->rlink=NULL;
}
link1->rlink=temp;
}
else
{
temp=(node*)malloc(sizeof(node)); //left branch
temp->data=num;
temp->rt=1;
temp->rlink=link1;
if(link1->lt==1)
{
temp->lt=1;
temp->llink=link1->llink;
link1->lt=0;
}
else
{
temp->lt=0;
temp->llink=NULL;
}
link1->llink=temp;
}
}
return root;

}
//..........................Preorder traversal.................................
void preorder(node* link)
{
while(link)
{
while(link->llink!=NULL && link->lt==0)
{
printf(" %d ",link->data);
link=link->llink;
}
printf("%d ",link->data);
while(link->rt==1)
{
link=link->rlink;
}
link=link->rlink;
}
}
//.........................Inorder Traversal...................................
void inorder(node* link)
{
while(link)
{
while(link->llink!=NULL && link->lt==0)
link=link->llink;
printf(" %d ",link->data);
while(link->rt==1)
{
link=link->rlink;
printf("%d ",link->data);
}
link=link->rlink;
}
}
//.........................Postorder Traversal.................................
void postorder(node* link)
{
int *store,i=0;
store=(int *)malloc(count * sizeof(int));
while(i!=count)
{
while(link->rt==0 && link->rlink!=NULL)
{
*(store+i)=link->data;
i++;
link=link->rlink;
}
*(store+i)=link->data;

i++;
while(link->lt==1)
{
link=link->llink;
}
link=link->llink;
}
for(i=count-1;i>=0;i--)
{
printf(" %d ",*(store+i));
}
}
/*..........................................................................*/

You might also like