Binary Search Tree (BST)
Binary Search Tree (BST)
struct node{
int key;
struct node *left, *right;
};
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);
}
//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;
}