Numbers Programming QuestionsC# program to check if a number is divisible by 2C# program to accept 2 integers and return remainderC# program to calculate factorial without using recursionC# program to print nth number in Fibonacci seriesC# program to swap two numbers without using a temp variableC# program to check if the entered number is Armstrong numberC# program to find GCD and LCMC# program to check if a number is prime or notC# program to check if a number is Palindromic or notC# program to determine total ways stairs can be climbedC# program to solve FizzBuzz problemC# program to display factor of entered numberPatterns Programming QuestionsC# program to print star triangleC# program to print star triangleC# program to print star triangleC# program to print star diamondC# program to print star M patternC# program to print number triangle-1C# program to print number triangle-2C# program to print number triangle-3C# program to print number triangle-4C# program to print number triangle-5C# program to print number patternC# program to print number diamondC# program to print alphabet patternStrings Programming QuestionsC# program to print duplicate characters in a StringC# program to check if two Strings are anagrams of each otherC# program to reverse String by using Iteration and RecursionC# program to count number of words in a StringC# program to check if String is PalindromeC# program to remove duplicate characters from StringC# program to return highest occurred character in a StringC# program to determine if the string has all unique charactersC# program to replace all spaces in a string with %20C# program to find all substring in a stringGiven a string containing just the characters (, ), {, }, [ and ], determine if the input string is validGiven two words, beginWord and endWord, and a word list, find the length of the shortest transformation sequence from beginWord to endWordRecursion Programming QuestionsC# program to find factorial of a number using recursionC# program to find the sum of digits of a number using recursionC# program to calculate Power of a number using recursionC# program to form the Fibonacci series using recursionC# program to find GCD using recursionC# program to convert a number from Decimal to Binary using recursionC# program to reverse a LinkedList using recursionC# program to do a recursive binary search in an arrayC# program to write recursive Quicksort algorithmC# program to print a singly linked list backwards using recursionC# program to Towers of Hanoi using recursionC# program to print table of any given number by using recursionArray Programming QuestionsC# program to sort an array in ascending orderC# program to sort an array in descending orderC# program to reverse an arrayC# program to find majority element in an unsorted arrayC# program to find missing number in integer array of 1 to 20C# program to merge two sorted arrays into oneC# program to swap min and max element in integer arrayC# program to determine if any two integers in array sum to given integerC# program to check if array contains a duplicate numberC# program to rotate array to a given pivotC# program to move zeros to end of arrayC# program to find the longest common prefix string amongst an array of stringsC# program to find majority number which appears more than 50% in the unsorted arrayData structures Programming QuestionsC# program to reverse a LinkedlistC# program to find node in LinkedlistC# program to merge two sorted LinkedlistC# program to traverse singly LinkedListC# program to traverse circular singly LinkedListC# program to remove duplicates from a sorted LinkedlistC# program to find nth to last element in singly LinkedlistC# program to delete nth element from headnodeC# program to detect a cycle in LinkedlistC# program to implement binary search treeC# program to implement binary search tree TraversalC# program to find min and max in binary search treeC# program to delete nodes from binary search treeC# program to Breadth First Search (BFS)C# program to Depth First Search (DFS)C# program to implement stackC# program to stack with Push & Pop operationC# program to reverse a StackSorting AlgorithmsSelection Sort Algorithm in C#Insertion Sort Algorithm in C#Heap Sort Algorithm in C#Merge Sort Algorithm in C#Quick Sort Algorithm in C#Bubble Sort Algorithm in C#Shell Sort Algorithm in C#Comb Sort Algorithm in C#Bucket Sort Algorithm in C#Radix Sort Algorithm in C#Searching AlgorithmsLinear or Sequntial Search AlgorithmBinary Search AlgorithmLinear vs Binary Search AlgorithmInterpolation Search AlgorithmInterpolation vs Binary Search AlgorithmTernary Search AlgorithmWhy is Binary Search preferred over Ternary Search?Jump Search AlgorithmExponential Search Algorithm

C# program to delete nodes from binary search tree

Here's an example of a C# program that implements deleting nodes from a binary search tree:


using System;

class Node
{
    public int Data;
    public Node Left;
    public Node Right;

    public Node(int data)
    {
        Data = data;
        Left = null;
        Right = null;
    }
}

class BinarySearchTree
{
    private Node root;

    public void Insert(int data)
    {
        root = InsertRecursive(root, data);
    }

    private Node InsertRecursive(Node current, int data)
    {
        if (current == null)
        {
            return new Node(data);
        }

        if (data < current.Data)
        {
            current.Left = InsertRecursive(current.Left, data);
        }
        else if (data > current.Data)
        {
            current.Right = InsertRecursive(current.Right, data);
        }

        return current;
    }

    public void Delete(int data)
    {
        root = DeleteRecursive(root, data);
    }

    private Node DeleteRecursive(Node current, int data)
    {
        if (current == null)
        {
            return null;
        }

        if (data < current.Data)
        {
            current.Left = DeleteRecursive(current.Left, data);
        }
        else if (data > current.Data)
        {
            current.Right = DeleteRecursive(current.Right, data);
        }
        else
        {
            // Case 1: No child or only one child
            if (current.Left == null)
            {
                return current.Right;
            }
            else if (current.Right == null)
            {
                return current.Left;
            }

            // Case 2: Two children
            current.Data = FindMinValue(current.Right);
            current.Right = DeleteRecursive(current.Right, current.Data);
        }

        return current;
    }

    private int FindMinValue(Node current)
    {
        int minValue = current.Data;
        while (current.Left != null)
        {
            minValue = current.Left.Data;
            current = current.Left;
        }
        return minValue;
    }

    public void InorderTraversal()
    {
        InorderTraversalRecursive(root);
        Console.WriteLine();
    }

    private void InorderTraversalRecursive(Node current)
    {
        if (current != null)
        {
            InorderTraversalRecursive(current.Left);
            Console.Write(current.Data + " ");
            InorderTraversalRecursive(current.Right);
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        BinarySearchTree bst = new BinarySearchTree();

        // Inserting elements into the binary search tree
        bst.Insert(50);
        bst.Insert(30);
        bst.Insert(20);
        bst.Insert(40);
        bst.Insert(70);
        bst.Insert(60);
        bst.Insert(80);

        // Performing inorder traversal of the binary search tree
        Console.WriteLine("Inorder Traversal of the Binary Search Tree:");
        bst.InorderTraversal();

        // Deleting elements from the binary search tree
        int deleteValue = 30;
        bst.Delete(deleteValue);
        Console.WriteLine($"Deleted {deleteValue} from the binary search tree.");

        // Performing inorder traversal after deletion
        Console.WriteLine("Inorder Traversal of the Binary Search Tree:");
        bst.InorderTraversal();
    }
}

This program creates a binary search tree class ('BinarySearchTree') that contains a private 'Node' class. The 'Node' class represents each node in the binary search tree and holds the data and references to the left and right child nodes.

The 'BinarySearchTree' class provides two methods: 'Insert' and 'Delete'. The 'Insert' method inserts a new node with the given data into the binary search tree. The 'Delete' method deletes a node with the given data from the binary search tree. The 'Delete' method handles three cases: 1) when the node to be deleted has no child or only one child, and 2) when the node to be deleted has two children. In the case of two children, it finds the minimum value in the right subtree and replaces the node's data with that value. It then recursively deletes the node with the minimum value from the right subtree.

In the 'Main' method, we create an instance of 'BinarySearchTree', insert elements into the binary search tree using the Insert method, and then perform an inorder traversal of the tree using the 'InorderTraversal' method. Next, we delete a node with the value 30 using the 'Delete' method and print a message indicating the deleted value. Finally, we perform an inorder traversal of the tree again to see the updated tree after deletion.

When you run this program, it will output the following:

Inorder Traversal of the Binary Search Tree:
20 30 40 50 60 70 80
Deleted 30 from the binary search tree.
Inorder Traversal of the Binary Search Tree:
20 40 50 60 70 80

This demonstrates the implementation of deleting nodes from a binary search tree in C#. The program successfully deletes the node with the value 30 from the binary search tree and updates the tree accordingly.