Search
 
SCRIPT & CODE EXAMPLE
 

CPP

delete a node from binery search tree c++


// C++ program to demonstrate
// delete operation in binary
// search tree
#include <bits/stdc++.h>
using namespace std;
 
struct node {
    int key;
    struct node *left, *right;
};
 
// A utility function to create a new BST node
struct node* newNode(int item)
{
    struct node* temp
        = (struct node*)malloc(sizeof(struct node));
    temp->key = item;
    temp->left = temp->right = NULL;
    return temp;
}
 
// A utility function to do
// inorder traversal of BST
void inorder(struct node* root)
{
    if (root != NULL) {
        inorder(root->left);
        cout << root->key;
        inorder(root->right);
    }
}
 
/* A utility function to
insert a new node with given key in
 * BST */
struct node* insert(struct node* node, int key)
{
    /* If the tree is empty, return a new node */
    if (node == NULL)
        return newNode(key);
 
    /* Otherwise, recur down the tree */
    if (key < node->key)
        node->left = insert(node->left, key);
    else
        node->right = insert(node->right, key);
 
    /* return the (unchanged) node pointer */
    return node;
}
 
/* Given a non-empty binary search tree, return the node
with minimum key value found in that tree. Note that the
entire tree does not need to be searched. */
struct node* minValueNode(struct node* node)
{
    struct node* current = node;
 
    /* loop down to find the leftmost leaf */
    while (current && current->left != NULL)
        current = current->left;
 
    return current;
}
 
/* Given a binary search tree and a key, this function
deletes the key and returns the new root */
struct node* deleteNode(struct node* root, int key)
{
    // base case
    if (root == NULL)
        return root;
 
    // If the key to be deleted is
    // smaller than the root's
    // key, then it lies in left subtree
    if (key < root->key)
        root->left = deleteNode(root->left, key);
 
    // If the key to be deleted is
    // greater than the root's
    // key, then it lies in right subtree
    else if (key > root->key)
        root->right = deleteNode(root->right, key);
 
    // if key is same as root's key, then This is the node
    // to be deleted
    else {
        // node has no child
        if (root->left==NULL and root->right==NULL)
            return NULL;
       
        // node with only one child or no child
        else if (root->left == NULL) {
            struct node* temp = root->right;
            free(root);
            return temp;
        }
        else if (root->right == NULL) {
            struct node* temp = root->left;
            free(root);
            return temp;
        }
 
        // node with two children: Get the inorder successor
        // (smallest in the right subtree)
        struct node* temp = minValueNode(root->right);
 
        // Copy the inorder successor's content to this node
        root->key = temp->key;
 
        // Delete the inorder successor
        root->right = deleteNode(root->right, temp->key);
    }
    return root;
}
 
// Driver Code
int main()
{
    /* Let us create following BST
            50
        /     
        30     70
        /  / 
    20 40 60 80 */
    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 = insert(root, 60);
    root = insert(root, 80);
 
    cout << "Inorder traversal of the given tree 
";
    inorder(root);
 
    cout << "
Delete 20
";
    root = deleteNode(root, 20);
    cout << "Inorder traversal of the modified tree 
";
    inorder(root);
 
    cout << "
Delete 30
";
    root = deleteNode(root, 30);
    cout << "Inorder traversal of the modified tree 
";
    inorder(root);
 
    cout << "
Delete 50
";
    root = deleteNode(root, 50);
    cout << "Inorder traversal of the modified tree 
";
    inorder(root);
 
    return 0;
}
 
// This code is contributed by shivanisinghss2110
Comment

PREVIOUS NEXT
Code Example
Cpp :: c++ max of array 
Cpp :: remove last index of the string in c++ 
Cpp :: c++ create multidimensional vector 
Cpp :: c++ arithmetic operators 
Cpp :: segmented sieve of Eratosthenes in cpp 
Cpp :: round up 2 digits float c++ 
Cpp :: How to pause a c++ program. 
Cpp :: udo apt install dotnet-sdk-5 
Cpp :: char ascii c++ 
Cpp :: arduino funktion 
Cpp :: find max element in array c++ 
Cpp :: c++ do while loop 
Cpp :: remove decimal c++ 
Cpp :: calloc c++ 
Cpp :: stoi cpp 
Cpp :: cout hex c++ 
Cpp :: how to declare a 2d boolean vector in c++ 
Cpp :: use uint in c++ 
Cpp :: filling 2d array with 0 c++ 
Cpp :: draw rectangle opencv c++ 
Cpp :: inline function in c++ 
Cpp :: selection sort c++ algorithm 
Cpp :: cpp return array 
Cpp :: c++ 14 for sublime windoes build system 
Cpp :: priority queue in c++ 
Cpp :: how can we create 4 digit random number in c++ 
Cpp :: matrix dynamic memory c++ 
Cpp :: joining two vectors in c++ 
Cpp :: c++ write to csv file append 
Cpp :: c++ set swap 
ADD CONTENT
Topic
Content
Source link
Name
1+3 =