Binary Search Tree (BST)
struct node{
int key;
struct node *left, *right;
};
struct node *newNode(int item){
struct node *temp = (struct node *)malloc(sizeof(struct node));
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
void PrintTree(struct node *root){
if (root == NULL) return;
printf("%d ", root->key);
PrintTree(root->left);
PrintTree(root->right);
}
void inordertraversal(struct node *root){
if (root == NULL) return;
inordertraversal(root->left);
printf("\n%d ", root->key);
inordertraversal(root->right);
}
void preordertraversal(struct node *root){
if (root == NULL) return;
printf("%d ", root->key);
preordertraversal(root->left);
preordertraversal(root->right);
}
void postordertraversal(struct node *root){
if (root == NULL) return;
postordertraversal(root->left);
postordertraversal(root->right);
printf("%d ", root->key);
}
struct node* insert(struct node* node, int key){
if (node == NULL) return newNode(key);
if (key < node->key)
node->left = insert(node->left, key);
else
node->right = insert(node->right, key);
return node;
}
struct node * minValueNode(struct node* node){
struct node* current = node;
while (current && current->left != NULL)
current = current->left;
return current;
}
struct node* deleteNode(struct node* root, int key){
//case 1: No Child
if (root == NULL) return root; // if only left child present
// find left or right
if (key < root->key) else if (root->right == NULL){
root->left = deleteNode(root->left, key); struct node *temp = root->left;
else if (key > root->key) free(root);
root->right = deleteNode(root->right, key); return temp;
}
//case 2:
else{ // if two child present
// if only right child present struct node* temp = minValueNode(root->right);
if (root->left == NULL){ root->key = temp->key;
struct node *temp = root->right; root->right = deleteNode(root->right, temp->key);
free(root); }
return temp; return root;
} }
int main(){
struct node *root = NULL;
root = insert(root, 50);
root = insert(root, 30);
root = insert(root, 20);
root = insert(root, 40);
root = insert(root, 70); root = deleteNode(root, 20);
root = insert(root, 60); printf("Inorder traversal of the modified tree \n");
root = insert(root, 80); inordertraversal(root);
printf("Printing Tree\n"); printf("\nDelete 30\n");
PrintTree(root); root = deleteNode(root, 30);
printf("\n\nInorder traversal of the given tree \n"); printf("Inorder traversal of the modified tree \n");
inordertraversal(root); inordertraversal(root);
printf("\npreorder traversal of the given tree \n"); printf("\nDelete 50\n");
preordertraversal(root); root = deleteNode(root, 50);
printf("\npostorder traversal of the given tree \n"); printf("Inorder traversal of the modified tree \n");
postordertraversal(root); inordertraversal(root);
printf("\nDelete 20\n"); return 0;
}