#include <stdio.h>
#include <stdlib.h>
/* ---------- NODE DEFINITION ---------- */
typedef struct node {
int key;
struct node *left;
struct node *right;
} node;
/* ---------- CREATE NODE ---------- */
node* createNode(int key) {
node *newNode = (node*)malloc(sizeof(node));
newNode->key = key;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
/* ---------- INSERT INTO BST ---------- */
node* insert(node *root, int key) {
if (root == NULL)
return createNode(key);
if (key < root->key)
root->left = insert(root->left, key);
else if (key > root->key)
root->right = insert(root->right, key);
else
printf("Duplicate keys not allowed\n");
return root;
}
/* ---------- SEARCH ---------- */
int search(node *root, int key) {
if (root == NULL)
return 0;
if (key == root->key)
return 1;
else if (key < root->key)
return search(root->left, key);
else
return search(root->right, key);
}
/* ---------- TRAVERSALS ---------- */
void inorder(node *root) {
if (root != NULL) {
inorder(root->left);
printf("%d ", root->key);
inorder(root->right);
}
}
void preorder(node *root) {
if (root != NULL) {
printf("%d ", root->key);
preorder(root->left);
preorder(root->right);
}
}
void postorder(node *root) {
if (root != NULL) {
postorder(root->left);
postorder(root->right);
printf("%d ", root->key);
}
}
/* ---------- MAIN (MENU DRIVEN) ---------- */
int main() {
node *root = NULL;
int choice, key;
while (1) {
printf("\n--- BINARY SEARCH TREE MENU ---\n");
printf("1. Insert\n");
printf("2. Search\n");
printf("3. Inorder Traversal\n");
printf("4. Preorder Traversal\n");
printf("5. Postorder Traversal\n");
printf("6. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Enter key to insert: ");
scanf("%d", &key);
root = insert(root, key);
break;
case 2:
printf("Enter key to search: ");
scanf("%d", &key);
if (search(root, key))
printf("Key found in BST\n");
else
printf("Key NOT found in BST\n");
break;
case 3:
printf("Inorder Traversal: ");
inorder(root);
printf("\n");
break;
case 4:
printf("Preorder Traversal: ");
preorder(root);
printf("\n");
break;
case 5:
printf("Postorder Traversal: ");
postorder(root);
printf("\n");
break;
case 6:
printf("Exiting program...\n");
return 0;
default:
printf("Invalid choice\n");
}
}
}