Skip to content

Instantly share code, notes, and snippets.

@alejolp
Created March 17, 2021 17:32
Show Gist options
  • Save alejolp/851591159f037bf4e72f681fd1298db9 to your computer and use it in GitHub Desktop.
Save alejolp/851591159f037bf4e72f681fd1298db9 to your computer and use it in GitHub Desktop.
class TreeNode:
def __init__(self, value, left, right):
self.value = value
self.left = left
self.right = right
class BinarySearchTree:
def __init__(self):
self.root = None
def BST_insert(bst, node):
# ITERATIVE
if bst.root == None:
bst.root = node
else:
aux = bst.root
while True:
if node.value < aux.value:
if aux.left == None:
aux.left = node
break
else:
aux = aux.left
else:
if aux.right == None:
aux.right = node
break
else:
aux = aux.right
def BST_insert_rec_node(root, node):
# INSERT RECURSIVE
if root is None:
return node
elif node.value < root.value:
root.left = BST_insert_rec_node(root.left, node)
else:
root.right = BST_insert_rec_node(root.right, node)
return root
def BST_insert_rec(bst, node):
bst.root = BST_insert_rec_node(bst.root, node)
def BST_inorder_node(node):
if node:
BST_inorder_node(node.left)
print(node.value)
BST_inorder_node(node.right)
def BST_inorder(bst):
BST_inorder_node(bst.root)
def BST_preorder_node(node):
if node:
print(node.value)
BST_preorder_node(node.left)
BST_preorder_node(node.right)
def BST_preorder(bst):
BST_preorder_node(bst.root)
def BST_posorder_node(node):
if node:
BST_posorder_node(node.left)
BST_posorder_node(node.right)
print(node.value)
def BST_preorder(bst):
BST_posorder_node(bst.root)
def BST_search_rec_node(node, value):
if node == None:
return False
elif node.value == value:
return True
elif value < node.value:
return BST_search_rec_node(node.left, value)
else:
return BST_search_rec_node(node.right, value)
def BST_search_rec(bst, value):
return BST_search_rec_node(bst.root, value)
def BST_invert_rec_node(node):
if node:
node.left, node.right = node.right, node.left
BST_invert_rec_node(node.left)
BST_invert_rec_node(node.right)
def BST_invert_rec(bst):
BST_invert_rec_node(bst.root)
bst = BinarySearchTree()
node1 = TreeNode(10, None, None)
node2 = TreeNode(8, None, None)
node3 = TreeNode(12, None, None)
BST_insert(bst, node1)
BST_insert(bst, node2)
BST_insert(bst, node3)
BST_inorder(bst)
print()
print("Search for 10: {}".format(BST_search_rec(bst, 10)))
print("Search for 20: {}".format(BST_search_rec(bst, 20)))
print()
bst = BinarySearchTree()
node1 = TreeNode(10, None, None)
node2 = TreeNode(8, None, None)
node3 = TreeNode(12, None, None)
node4 = TreeNode(9, None, None)
node5 = TreeNode(11, None, None)
BST_insert_rec(bst, node1)
BST_insert_rec(bst, node2)
BST_insert_rec(bst, node3)
BST_insert_rec(bst, node4)
BST_insert_rec(bst, node5)
BST_inorder(bst)
print()
# Warning: the tree is not BST
# anymore after inversion!!
BST_invert_rec(bst)
BST_inorder(bst)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment