Upload
ekta-singh
View
220
Download
0
Embed Size (px)
Citation preview
8/6/2019 Threaded binary search tree
1/5
//Threaded Binary Search tree
#include#include#include
#include
int count=0;
typedef struct node node;
struct node{int data,lt,rt;node* llink;node* rlink;};
void preorder(node* );void inorder(node* );void postorder(node* );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;
8/6/2019 Threaded binary search tree
2/5
}}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((numdata)&&(link->lt!=1)){
x=1;link1=link;link=link->llink;
8/6/2019 Threaded binary search tree
3/5
}
else if((numdata)&&(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 branchtemp->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;
8/6/2019 Threaded binary search tree
4/5
}//..........................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;
8/6/2019 Threaded binary search tree
5/5
i++;
while(link->lt==1){link=link->llink;
}link=link->llink;
}for(i=count-1;i>=0;i--)
{printf(" %d ",*(store+i));
}}/*..........................................................................*/