Write a function to check if a given binary tree is a valid binary search tree.

Check if a given binary tree is a valid binary search tree:

To determine if a binary tree is a valid binary search tree, we need to ensure that the following conditions are satisfied for each node:



  1. The left subtree contains only nodes with values less than the current node's value.
  2. The right subtree contains only nodes with values greater than the current node's value.
  3. Both the left and right subtrees are valid binary search trees.

Here's an implementation of a function in Python that checks whether a given binary tree is a valid binary search tree:

class TreeNode:
    def __init__(self, value):
        self.val = value
        self.left = None
        self.right = None


def is_valid_bst(root):
    def is_valid_bst_util(node, min_val, max_val):
        if node is None:
            return True

        if node.val <= min_val or node.val >= max_val:
            return False

        return (
            is_valid_bst_util(node.left, min_val,
node.val) and
            is_valid_bst_util(node.right, node.val,
max_val)
        )

    return is_valid_bst_util(root, float('-inf'), float
('inf'))



In this code, we define a TreeNode class to represent each node in the binary tree. The is_valid_bst function takes the root node of the binary tree as an input and returns True if it is a valid binary search tree, and False otherwise.

The is_valid_bst_util is a recursive helper function that performs the actual check. It takes a node, along with the minimum and maximum values that the node's value should be between, and returns True if the subtree rooted at the node is a valid binary search tree.

Within the is_valid_bst_util function, we first check if the current node is None. If so, we consider it as a valid subtree and return True.

Next, we check if the node's value violates the binary search tree property. If the value is less than or equal to the min_val or greater than or equal to the max_val, then it is not a valid binary search tree, and we return False.

If the current node's value is within the acceptable range, we recursively check the left and right subtrees. For the left subtree, the maximum value is updated to be the current node's value, ensuring that all nodes in the left subtree are smaller than the current node. For the right subtree, the minimum value is updated to be the current node's value, ensuring that all nodes in the right subtree are greater than the current node.

The final call to is_valid_bst_util in the is_valid_bst function initializes the min_val and max_val to negative infinity and positive infinity, respectively, representing the initial range for the root node. This allows us to check the entire binary tree.



In conclusion, we hope you enjoyed reading our post and found it informative and valuable. We put a lot of effort into creating high-quality content and would love to hear your thoughts and feedback. So, please do leave a comment and let us know what you think. Additionally, we invite you to visit our website www.javaoneworld.com to read more beautifully written posts on various topics related to coding, programming, and technology. We are constantly updating our website with fresh and valuable content that will help you improve your skills and knowledge. We are excited to have you as a part of our community, and we look forward to connecting with you and providing you with more informative and valuable content in the future. 

Happy coding!✌✌

No comments:

Post a Comment