Python Program for BST Operations

 

Python Program for BST Operations

This program implements three fundamental operations on a Binary Search Tree (BST): inserting a new node, deleting an existing node, and searching for a node. Each function is documented to explain its purpose and the approach used.


class TreeNode:
    """A node in a binary search tree."""
    def __init__(self, key):
        """
        Initialize a tree node with a key.
        
        :param key: int, the integer key of the node
        """
        self.left = None
        self.right = None
        self.val = key

class BinarySearchTree:
    """Operations on a binary search tree."""
    def __init__(self):
        """Initialize an empty BST."""
        self.root = None

    def insert(self, key):
        """
        Insert a new node with the given key in the BST.
        
        :param key: int, the key to insert
        """
        self.root = self._insert_recursive(self.root, key)

    def _insert_recursive(self, node, key):
        """
        Helper method to insert recursively based on BST properties.
        
        :param node: TreeNode, the current node in the traversal
        :param key: int, the key to insert
        :return: TreeNode, the adjusted node
        """
        if not node:
            return TreeNode(key)
        elif key < node.val:
            node.left = self._insert_recursive(node.left, key)
        else:
            node.right = self._insert_recursive(node.right, key)
        return node

    def delete(self, key):
        """
        Delete the node with the specified key from the BST.
        
        :param key: int, the key of the node to delete
        """
        self.root = self._delete_recursive(self.root, key)

    def _delete_recursive(self, node, key):
        """
        Helper method to delete a node recursively.
        
        :param node: TreeNode, the current node in the traversal
        :param key: int, the key of the node to delete
        :return: TreeNode, the adjusted node after deletion
        """
        if not node:
            return node
        if key < node.val: node.left = self._delete_recursive(node.left, key) elif key > node.val:
            node.right = self._delete_recursive(node.right, key)
        else:
            if not node.left:
                return node.right
            elif not node.right:
                return node.left
            temp_val = self._get_min(node.right)
            node.val = temp_val
            node.right = self._delete_recursive(node.right, temp_val)
        return node

    def _get_min(self, node):
        """
        Get the minimum value in the BST.
        
        :param node: TreeNode, the node from where to find the minimum
        :return: int, the minimum value found
        """
        current = node
        while current.left is not None:
            current = current.left
        return current.val

    def search(self, key):
        """
        Search for a node with the specified key in the BST.
        
        :param key: int, the key to search for
        :return: bool, True if the node is found, False otherwise
        """
        return self._search_recursive(self.root, key)

    def _search_recursive(self, node, key):
        """
        Helper method to search for a key recursively.
        
        :param node: TreeNode, the current node in the traversal
        :param key: int, the key to search for
        :return: bool, True if found, False otherwise
        """
        if not node:
            return False
        elif key == node.val:
            return True
        elif key < node.val:
            return self._search_recursive(node.left, key)
        else:
            return self._search_recursive(node.right, key)

# Example Usage
if __name__ == "__main__":
    bst = BinarySearchTree()
    bst.insert(50)
    bst.insert(30)
    bst.insert(20)
    bst.insert(40)
    bst.insert(70)
    bst.insert(60)
    bst.insert(80)
    
    print("Search for 40:", bst.search(40))
    bst.delete(70)
    print("Search for 70:", bst.search(70))

The program defines a TreeNode class to represent individual nodes of the BST and a BinarySearchTree class that encapsulates the operations. Each method in the BinarySearchTree class is accompanied by a helper function to facilitate recursive operations, ensuring that the tree’s properties are maintained throughout insertions, deletions, and searches.

 

Leave a Reply

Your email address will not be published. Required fields are marked *