added binary search tree validation method
parent
af47764be0
commit
628feb0d4f
|
@ -201,7 +201,6 @@ class Node:
|
||||||
if self.right:
|
if self.right:
|
||||||
self.right.display() # display tree(right)
|
self.right.display() # display tree(right)
|
||||||
|
|
||||||
|
|
||||||
def build_tree(elements):
|
def build_tree(elements):
|
||||||
""" constructor """
|
""" constructor """
|
||||||
root = Node(elements[0])
|
root = Node(elements[0])
|
||||||
|
@ -210,6 +209,31 @@ def build_tree(elements):
|
||||||
root.add_child(elements[i])
|
root.add_child(elements[i])
|
||||||
return root
|
return root
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
To validate if a tree is a binary search tree (BST) or not, we need to check if each node's data satisfies the conditions below:
|
||||||
|
|
||||||
|
Conditions:
|
||||||
|
|
||||||
|
1. For a node in the left subtree: -infinity < node.data < parent_node.data.
|
||||||
|
2. For a node in the right subtree: parent_node.data < node.data < infinity.
|
||||||
|
|
||||||
|
These conditions ensure that nodes in the left subtree are less than the parent node,
|
||||||
|
while nodes in the right subtree are greater than the parent node, which is a requirement of a binary search tree.
|
||||||
|
"""
|
||||||
|
import math
|
||||||
|
def valid_bst(root: Node) -> bool:
|
||||||
|
def helper(node,min_val,max_val):
|
||||||
|
if not node: # reaching the end of the tree.
|
||||||
|
return True
|
||||||
|
if not (min_val < node.data < max_val): # if the node value not in the range which is invalid node.
|
||||||
|
return False
|
||||||
|
return helper(node.left,min_val,node.data) and helper(node.right,node.data,max_val) # in-order traversal
|
||||||
|
|
||||||
|
if not root:
|
||||||
|
return True
|
||||||
|
return helper(root,-math.inf,math.inf)
|
||||||
|
|
||||||
# If build_tree() is not used
|
# If build_tree() is not used
|
||||||
# root = Node(4)
|
# root = Node(4)
|
||||||
# root.add_child(6)
|
# root.add_child(6)
|
||||||
|
@ -240,3 +264,6 @@ if __name__ == '__main__':
|
||||||
print(country_tree.in_order_traversal()) # return list in sorted order
|
print(country_tree.in_order_traversal()) # return list in sorted order
|
||||||
print(country_tree.search("UK")) # False
|
print(country_tree.search("UK")) # False
|
||||||
print(country_tree.search("Japan")) # True
|
print(country_tree.search("Japan")) # True
|
||||||
|
|
||||||
|
# Valid BST
|
||||||
|
print(valid_bst(list_tree))
|
||||||
|
|
Loading…
Reference in New Issue