Insert and delete item in a BST

 #include <stdio.h>

#include <stdlib.h>
struct tree
{
    int data;
    struct tree *left;
    struct tree *right;
};
int arr[9], i = 0;
struct tree *Createnode(int data)
{
    struct tree *nd = (struct tree *)malloc(sizeof(struct tree));
    nd->left = NULL;
    nd->right = NULL;
    nd->data = data;
    return nd;
}
void inOrderTraversal(struct tree *root)
{
    if (root != NULL)
    {
        inOrderTraversal(root->left);
        printf("%d "root->data);
        arr[i++= root->data;
        inOrderTraversal(root->right);
    }
}

void preOrderTraversal(struct tree *root)
{
    if (root != NULL)
    {
        printf("%d "root->data);
        preOrderTraversal(root->left);
        preOrderTraversal(root->right);
    }
}
struct tree *Least_rst(struct tree *root)
{
    struct tree *temp = root->right;
    if (temp == NULL)
    {
        printf("No element in Right sub tree\n");
        return root;
    }
    else
    {
        while (temp->left)
        {
            temp = temp->left;
        }
        return temp;
    }
}
struct tree *Max_lst(struct tree *root)
{
    struct tree *temp = root->left;
    if (temp == NULL)
    {
        printf("No element in Right sub tree\n");
        return root;
    }
    else
    {
        while (temp->right)
        {
            temp = temp->right;
        }
        return temp;
    }
}
struct tree* insertElement(struct tree *rootint item)
{
    struct tree *temp = root;
    struct tree *node = Createnode(item);
    if (temp == NULL)
    {
        

        // struct tree *root = Createnode(item);
        struct tree *n1 = Createnode(item);
        return n1;
    }
    else
    {
        while (temp)
        {
            if (temp->data == node->data)
            {
                printf("Insertion not possible since tree already contains element %d.\n"item);
                break;
            }

            else if (node->data < temp->data)
            {
                if (temp->left == NULL)
                {

                    temp->left = node;
                    break;
                }
                else
                    temp = temp->left;
            }
            else if (node->data > temp->data)
            {
                if (temp->right == NULL)
                {

                    temp->right = node;
                    break;
                }
                else
                    temp = temp->right;
            }
        }
        return root;
    }
}
struct tree *deletenode(struct tree *rootint value)
{
    struct tree *temp = root;

    if (temp == NULL)
    {
        printf("No such element found in the Binary tree : %d\n\t OR\nThe Tree is Empty\n"value);
        return root;
    }
    else
    {
        if (temp->data > value)
            temp->left = deletenode(temp->leftvalue);

        else if (temp->data < value)
            temp->right = deletenode(temp->rightvalue);

        else
        {
            if (!temp->left && !temp->right)
            {
                struct tree *temp1 = NULL;
                free(temp);
                return temp1;
            }
            else if (temp->left && temp->right)
            {
                struct tree *temp1 = Least_rst(temp);
                temp->data = temp1->data;
                temp->right = deletenode(temp->righttemp1->data);
            }
            else
            {
                if (temp->left == NULL)
                {
                    struct tree *temp2 = temp->right;
                    free(temp);
                    return temp2;
                }
                else 
                {
                    struct tree *temp2 = temp->left;
                    free(temp);
                    return temp2;
                }
            }
        }
    }
}

int main()
{
    struct tree *t = Createnode(9);
    struct tree *t1 = Createnode(4);
    struct tree *t2 = Createnode(11);
    struct tree *t4 = Createnode(2);
    struct tree *t5 = Createnode(6);
    struct tree *t6 = Createnode(15);
    struct tree *t7 = Createnode(5);
    struct tree *t8 = Createnode(8);
    struct tree *t9 = Createnode(12);

    t->left = t1;
    t->right = t2;
    t1->left = t4;
    t1->right = t5;
    t5->right = t8;
    t5->left = t7;
    t2->right = t6;
    t6->left = t9;
    
    t  = insertElement(t , 25);
    t  = insertElement(t , 3);
    t  = insertElement(t , 7);
    t  = insertElement(t , 9);
    t = deletenode(t , 15);
    preOrderTraversal(t);
    printf("\n");
    inOrderTraversal(t);
    printf("\n");

    return 0;
}

Comments

Popular posts from this blog

Height of the Tree.

Multiple parenthesis balancing problem using stacks