Binary Search Tree (BST) Operations in C
Lab manual SPPU: Assignment 1, Set A a)
Implement a Binary search tree (BST) library (btree.h) with operations i) create ii) search iii) insert iv) inorder traversal v) preorder traversal and vi) postorder traversal. Write a menu driven program that performs the above operations.
Implementation of a Binary Search Tree (BST) library in C. The library (btree.h
) provides functions for creating, searching, inserting, and traversing the BST (inorder, preorder, and postorder). A menu-driven program.
Create the Header File (btree.h)
This file declares the structure and functions for the BST.
// btree.h #ifndef BTREE_H #define BTREE_H #include <stdio.h> #include <stdlib.h> // Structure for a BST node struct Node { int data; struct Node* left; struct Node* right; }; // Function declarations struct Node* createNode(int data); struct Node* insert(struct Node* root, int data); struct Node* search(struct Node* root, int data); void inorderTraversal(struct Node* root); void preorderTraversal(struct Node* root); void postorderTraversal(struct Node* root); #endif
Create the Source File (btree.c)
This file implements the functions declared in the header file.
// btree.c #include "btree.h" // Function to create a new node struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->left = newNode->right = NULL; return newNode; } // Function to insert a node into the BST struct Node* insert(struct Node* root, int data) { if (root == NULL) { return createNode(data); } if (data < root->data) { root->left = insert(root->left, data); } else if (data > root->data) { root->right = insert(root->right, data); } return root; } // Function to search for a node in the BST struct Node* search(struct Node* root, int data) { if (root == NULL || root->data == data) { return root; } if (data < root->data) { return search(root->left, data); } return search(root->right, data); } // Function for inorder traversal (Left -> Root -> Right) void inorderTraversal(struct Node* root) { if (root != NULL) { inorderTraversal(root->left); printf("%d ", root->data); inorderTraversal(root->right); } } // Function for preorder traversal (Root -> Left -> Right) void preorderTraversal(struct Node* root) { if (root != NULL) { printf("%d ", root->data); preorderTraversal(root->left); preorderTraversal(root->right); } } // Function for postorder traversal (Left -> Right -> Root) void postorderTraversal(struct Node* root) { if (root != NULL) { postorderTraversal(root->left); postorderTraversal(root->right); printf("%d ", root->data); } }
Create the Main Program (bst_operations.c)
This is a menu-driven program that uses the BST library.
// bst_operations.c #include "btree.h" int main() { struct Node* root = NULL; int choice, data; struct Node* result; while (1) { printf("\n--- Binary Search Tree Operations ---\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 data to insert: "); scanf("%d", &data); root = insert(root, data); break; case 2: printf("Enter data to search: "); scanf("%d", &data); result = search(root, data); if (result != NULL) { printf("Data %d found in the BST.\n", data); } else { printf("Data %d not found in the BST.\n", data); } break; case 3: printf("Inorder Traversal: "); inorderTraversal(root); printf("\n"); break; case 4: printf("Preorder Traversal: "); preorderTraversal(root); printf("\n"); break; case 5: printf("Postorder Traversal: "); postorderTraversal(root); printf("\n"); break; case 6: printf("Exiting...\n"); exit(0); default: printf("Invalid choice! Please try again.\n"); } } return 0; }