Posts Tagged binary search tree

Program for binary search tree in C++.

#include<iostream.h>            //INCLUDING LIBRARIES
#include<fstream.h>

struct node                        //DECLARING NODE DATA STRUCTURE
{
int data;
node *left, *right;
}*root, *cur ,*temp;

void pretrav (node *);            //FUNCTION PROTOTYPE FOR PRETRAVERSAL OF BINARY TREE
void intrav (node *);            //FUNCTION PROTOTYPE FOR INORDER TRAVERSAL OF BINARY TREE
void posttrav (node *);            //FUNCTION PROTOTYPE FOR POSTTRAVERSAL OF BINARY TREE

void main()                        //START OF MAIN
{
cout<<"\t\t\t  BINARY SEARCH TREE\n\n";
cout<<"\n\nDuplicates in the tree : ";
char ch,sign;
int num,count=0,countdup=0;;
ifstream fin;
fin.open("integer.txt");    //OPENING TEXT FILE CONTAINING INTEGERS AND STORING THE RETURNED PTR IN FIN

while(fin)                    //EXECUTE THE LOOP TILL THE END OF FILE
{

fin.get(ch);            //READ A CHARACTER FROM THE FILE

if (ch==' ')            //IF SPACE CONTINUE
continue;

if (ch=='+'||ch=='-')    //STORING THE SIGN OF NUMBER
sign=ch;

if (ch>='0'&&ch<='9')    //IF DIGIT ENCOUNTERED
{
fin.seekg(-1,ios::cur);
fin>>num;                //READING NUMBER IF DIGIT ENCOUNTERED
count++;                //INCREMENTING THE COUNTER
if (sign=='-')            //MAKING THE NUMBER NEGATIVE AND STORING IN NUM
num=0-num;
sign='+';                //MAKING SIGH POSITIVE ...DEFAULT
temp=new node;            //CREATING NEW NODE
temp->data=num;            //STORING THE NUM IN NEW NODE
temp->left=temp->right=NULL;        //MAKING LEFT & RIGHT PTRS OF TEMP NULL

cur=root;                //POINTING CUR PTR TO THE ROOT
if (count==1)            //IF ITS FIRST NODE MAKE IT ROOT
root=temp;
else
{
while(1)
{
if (cur->data<temp->data)
{
if (cur->right!=NULL)
cur=cur->right;        //MOVING CUR POINTER
else
{
cur->right=temp;
break;                //EXIT OUT OF WHILE LOOP
}
}

if (cur->data>temp->data)
{
if (cur->left!=NULL)
cur=cur->left;        //MOVING CUR POINTER
else
{
cur->left=temp;
break;                //EXIT OUT OF WHILE LOOP
}
}

if (cur->data==temp->data)
{
cout<<num<<"  ";        //PRINTING DUPLICATES
countdup++;
break;
}

}
}
}
}
if (countdup==0)
cout<<" None";

cout<<"\n\nPreorder Traversal of the Tree : ";
pretrav(root);                                    //CALLING FUNCTION FOR PREORDER TRAVERSAL OF TREE PASSING ROOT
cout<<endl<<endl;
cout<<"Inorder Traversal  of the Tree : ";
intrav (root);                                    //CALLING FUNCTION FOR INORDER TRAVERSAL OF TREE PASSING ROOT
cout<<endl<<endl;
cout<<"Postorder Traversal of the Tree: ";
posttrav(root);                                    //CALLING FUNCTION FOR POSTORDER TRAVERSAL OF TREE PASSING ROOT
cout<<endl<<endl;

}

void pretrav (node * point)                //DECLARING FUNCTION FOR PRETRAVERSAL OF THE TREE
{
cout<<" "<<point->data<<" ";
if (point->left!=NULL)
pretrav (point->left);

if (point->right!=NULL)
pretrav (point->right);
}

void intrav (node * point)                //DECLARING FUNCTION FOR INORDER TRAVERSAL OF THE TREE
{
if (point->left!=NULL)
intrav (point->left);
cout<<" " <<point->data<<" ";
if (point->right!=NULL)
intrav (point->right);

}

void posttrav (node *point)                //DECLARING FUNCTION FOR POSTORDER TRAVERSAL OF THE TREE
{
if (point->left!=NULL)
intrav (point->left);
if (point->right!=NULL)
intrav (point->right);
cout<<" " <<point->data<<" ";
}
       //END OF PROGRAM//

,

1 Comment

program to generate a binary tree in C.

#include<stdio.h>
int x;
struct nodetype
{
int info;
struct nodetype *left,*right;
};
typedef struct nodetype *nodeptr;
nodeptr root;
nodeptr maketree(int x);
void setleft(nodeptr p,int x);
void setright(nodeptr p,int x);
void search(int x,nodeptr p);
void inorder(nodeptr p);

main()
{
FILE *fp=fopen("binaryfile.c","r");
fscanf(fp,"%d",&x);
root=maketree(x);
while((fscanf(fp,"%d",&x))!=EOF)
search(x,root);

inorder(root);
}

void search(int x,nodeptr p)
{

if(x==(p->info)){
printf("duplicate found");
}
else if(x<(p->info))
if((p->left)==NULL)
setleft(p,x);
else search(x,p->left);
else if((p->right)==NULL)
setright(p,x);
else search(x,p->right);

}

nodeptr maketree(int x)
{
nodeptr p;
p=(struct nodetype *)malloc(sizeof(struct nodetype));
(p->info)=x;
(p->left)=NULL;
(p->right)=NULL;
return p;
}
void setleft(nodeptr p,int x)
{
if(p==NULL)
printf("error");
else if((p->left)!=NULL)
printf("/nerror");
else (p->left)=maketree(x);
}
void setright(nodeptr p,int x)
{
if(p==NULL)
printf("error");
else if((p->right)!=NULL)
printf("/nerror");
else (p->right)=maketree(x);
}
void inorder(nodeptr p)
{
if(p==NULL)
return;
else{
inorder(p->left);
printf("\n%d",p->info);
inorder(p->right);
}
return;
}

, , ,

No Comments

PROGRAM TO MAKE A BINARY SEARCH TREE AND TRAVERSE IT IN PREORDER,INORDER,POSTORDER METHOD.

#include<iostream.h>                         //HEADER FILES
#include<ctype.h>
#include<stdio.h>

struct tree                                       //STRUCTURE FOR TREE NODE
{
int data;
tree *left,*right;
};                                                //STRUCTURE FOR LIST
struct list
{
int num;
list * next;
};

list *head=NULL,*temp,*curr;
FILE* file;
void put(int no)                                 //PUT  NO. INTO LIST
{
temp=new list;
temp->num=no;
temp->next=NULL;
if(head==NULL)
{
head=temp;
curr=temp;
}
else
{
curr->next=temp;
curr=temp;
}
}

void getdata()
{
char ch;
int no,flag=1;
file=fopen("input.txt","r");
do
{
if(flag)
{
no=0;
flag=0;
}
ch=getc(file);
if(isdigit(ch))
no=no*10+ch-48;
else if(ch==' ')
{
flag=1;
put(no);
}
}while(ch!='n');
fclose(file);
}

void makenode(tree **garb,int num)        //PREPARE A NODE
{
(*garb)->data=num;
(*garb)->left=NULL;
(*garb)->right=NULL;
}

void maketree(tree *garb,tree **base)        //INSERT NODE INTO TREE
{
if((*base)==NULL)
{
*base=garb;
return;
}
else if(garb->data==(*base)->data)
{
cout<<"  "<<garb->data;
return;
}
else if(garb->data<(*base)->data)
maketree(garb,&((*base)->left));
else
maketree(garb,&((*base)->right));
}

void preorder(tree *node)         //PREORDER TRAVERSAL
{
cout<<" "<<node->data;
if(node->left!=NULL)
preorder(node->left);
if(node->right!=NULL)
preorder(node->right);
}

void inorder(tree *node)          //INORDER TRAVERSAL
{
if(node->left!=NULL)
inorder(node->left);
cout<<" "<<node->data;
if(node->right!=NULL)
inorder(node->right);
}

void postorder(tree *node)         //POST ORDER TRAVERSAL
{
if(node->left!=NULL)
postorder(node->left);
if(node->right!=NULL)
postorder(node->right);
cout<<" "<<node->data;
}
void main()                        //EXECUTION STARTS HERE
{
tree *garb,*root=NULL;
getdata();
temp=head;
cout<<"n DUPLICATE ELEMENTS ARE : n";
while(temp!=NULL)
{
garb=new tree;
makenode(&garb,temp->num);
maketree(garb,&root);
temp=temp->next;
}
cout<<"n PREORDER TRAVERSE :";
preorder(root);
cout<<"n INORDER TRAVERSE :";
inorder(root);
cout<<"n POSTORDER TRAVERSE :";
postorder(root);
free(garb);
free(root);
cout<<"n";
}

, , , ,

2 Comments