Program
10
#include<stdio.h>
#include<stdlib.h>
struct BST
{
int data;
struct BST *lchild;
struct BST *rchild;
};
typedef struct
BST * NODE;
NODE get_node()
{
NODE temp;
temp = (NODE)
malloc(sizeof(struct BST));
temp->lchild =
NULL;
temp->rchild =
NULL;
return temp;
}
void insert(NODE
root, NODE newnode);
void inorder(NODE
root);
void preorder(NODE
root);
void postorder(NODE
root);
void search(NODE
root, int key);
void insert(NODE
root, NODE newnode)
{
/*Note: if
newnode->data == root->data it will be skipped. No duplicate nodes are
allowed */
if (newnode->data
< root->data)
{
if (root->lchild
== NULL)
root->lchild =
newnode;
else
insert(root->lchild, newnode);
}
if (newnode->data
> root->data)
{
if (root->rchild
== NULL)
root->rchild =
newnode;
else
insert(root->rchild, newnode);
}
}
void search(NODE
root, int key)
{
NODE cur;
if(root == NULL)
{
printf("\nBST
is empty.");
return;
}
cur = root;
while (cur != NULL)
{
if (cur->data ==
key)
{
printf("\nKey
element %d is present in BST", cur->data);
return;
}
if (key <
cur->data)
cur =
cur->lchild;
else
cur =
cur->rchild;
}
printf("\nKey
element %d is not found in the BST", key);
}
void inorder(NODE
root)
{
if(root != NULL)
{
inorder(root->lchild);
printf("%d
", root->data);
inorder(root->rchild);
}
}
void preorder(NODE
root)
{
if (root != NULL)
{
printf("%d
", root->data);
preorder(root->lchild);
preorder(root->rchild);
}
}
void postorder(NODE
root)
{
if (root != NULL)
{
postorder(root->lchild);
postorder(root->rchild);
printf("%d
", root->data);
}
}
void main()
{
int ch, key, val, i,
n;
NODE root = NULL,
newnode;
while(1)
{
printf("\n~~~~BST
MENU~~~~");
printf("\n1.Create
a BST");
printf("\n2.Search");
printf("\n3.BST
Traversals: ");
printf("\n4.Exit");
printf("\nEnter
your choice: ");
scanf("%d",
&ch);
switch(ch)
{
case 1:
printf("\nEnter the number of elements: ");
scanf("%d",
&n);
for(i=1;i<=n;i++)
{
newnode =
get_node();
printf("\nEnter
The value: ");
scanf("%d",
&val);
newnode->data =
val;
if (root == NULL)
root = newnode;
else
insert(root,
newnode);
}
break;
case 2: if (root ==
NULL)
printf("\nTree
Is Not Created");
else
{
printf("\nThe
Preorder display : ");
preorder(root);
printf("\nThe
Inorder display : ");
inorder(root);
printf("\nThe
Postorder display : ");
postorder(root);
}
break;
case 3:
printf("\nEnter Element to be searched: ");
scanf("%d",
&key);
search(root,
key);
break;
case 4: exit(0);
}
}
}
No comments:
Post a Comment