0% found this document useful (0 votes)
13 views6 pages

BST - 2

Program for bst using dsa

Uploaded by

oyezoroo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views6 pages

BST - 2

Program for bst using dsa

Uploaded by

oyezoroo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 6

#include<stdio.

h>

#include<malloc.h>

struct node{

int data;

struct node* left;

struct node* right;

};

struct node* createNode(int data){

struct node *n; // creating a node pointer

n = (struct node *) malloc(sizeof(struct node)); // Allocating memory in the heap

n->data = data; // Setting the data

n->left = NULL; // Setting the left and right children to NULL

n->right = NULL; // Setting the left and right children to NULL

return n; // Finally returning the created node

void preOrder(struct node* root){

if(root!=NULL){

printf("%d ", root->data);

preOrder(root->left);

preOrder(root->right);

void postOrder(struct node* root){

if(root!=NULL){

postOrder(root->left);

postOrder(root->right);

printf("%d ", root->data);

}
}

void inOrder(struct node* root){

if(root!=NULL){

inOrder(root->left);

printf("%d ", root->data);

inOrder(root->right);

int isBST(struct node* root){

static struct node *prev = NULL;

if(root!=NULL){

if(!isBST(root->left)){

return 0;

if(prev!=NULL && root->data <= prev->data){

return 0;

prev = root;

return isBST(root->right);

else{

return 1;

struct node * searchIter(struct node* root, int key){

while(root!=NULL){

if(key == root->data){

return root;

}
else if(key<root->data){

root = root->left;

else{

root = root->right;

return NULL;

void insert(struct node *root, int key){

struct node *prev = NULL;

while(root!=NULL){

prev = root;

if(key==root->data){

printf("Cannot insert %d, already in BST", key);

return;

else if(key<root->data){

root = root->left;

else{

root = root->right;

struct node* new = createNode(key);

if(key<prev->data){

prev->left = new;

else{

prev->right = new;

}
}

struct node *inOrderPredecessor(struct node* root){

root = root->left;

while (root->right!=NULL)

root = root->right;

return root;

struct node *deleteNode(struct node *root, int value){

struct node* iPre;

if (root == NULL){

return NULL;

if (root->left==NULL&&root->right==NULL){

free(root);

return NULL;

//searching for the node to be deleted

if (value < root->data){

root-> left = deleteNode(root->left,value);

else if (value > root->data){

root-> right = deleteNode(root->right,value);

//deletion strategy when the node is found

else{

iPre = inOrderPredecessor(root);
root->data = iPre->data;

root->left = deleteNode(root->left, iPre->data);

return root;

int main(){

// Constructing the root node - Using Function (Recommended)

struct node *p = createNode(5);

struct node *p1 = createNode(3);

struct node *p2 = createNode(6);

struct node *p3 = createNode(1);

struct node *p4 = createNode(4);

// Finally The tree looks like this:

// 5

// /\

// 3 6

// / \

// 1 4

// Linking the root node with left and right children

p->left = p1;

p->right = p2;

p1->left = p3;

p1->right = p4;

inOrder(p);

printf("\n");

deleteNode(p, 3);

inOrder(p);
return 0;

You might also like