Skip to content

Instantly share code, notes, and snippets.

@gaviral
Created October 15, 2019 05:32
Show Gist options
  • Save gaviral/949ccab825e6c7cc3acc6951b008cef4 to your computer and use it in GitHub Desktop.
Save gaviral/949ccab825e6c7cc3acc6951b008cef4 to your computer and use it in GitHub Desktop.
##########################################################
# CODE INSTRUCTIONS: #
# 1) The method findLargestSmallerKey you're asked #
# to implement is located at line 30. #
# 2) Use the helper code below to implement it. #
# 3) In a nutshell, the helper code allows you to #
# to build a Binary Search Tree. #
# 4) Jump to line 71 to see an example for how the #
# helper code is used to test findLargestSmallerKey. #
##########################################################
# A node
class Node:
# Constructor to create a new node
def __init__(self, key):
self.key = key
self.left = None
self.right = None
self.parent = None
# A binary search tree
class BinarySearchTree:
# Constructor to create a new BST
def __init__(self):
self.root = None
self.res = 0
def in_order_search(self, root, num):
# BRUTE FORCE
if root:
self.in_order_search(root.left, num)
if root.key < num:
self.res = max(root.key, self.res)
self.in_order_search(root.right, num)
return self.res
def find_largest_smaller_key(self, num):
return self.in_order_search(self.root, num)
# Given a binary search tree and a number, inserts a
# new node with the given number in the correct place
# in the tree. Returns the new root pointer which the
# caller should then use(the standard trick to avoid
# using reference parameters)
def insert(self, key):
# 1) If tree is empty, create the root
if self.root is None:
self.root = Node(key)
return
# 2) Otherwise, create a node with the key
# and traverse down the tree to find where to
# to insert the new node
currentNode = self.root
newNode = Node(key)
while currentNode is not None:
if key < currentNode.key:
if currentNode.left is None:
currentNode.left = newNode
newNode.parent = currentNode
break
else:
currentNode = currentNode.left
else:
if currentNode.right is None:
currentNode.right = newNode
newNode.parent = currentNode
break
else:
currentNode = currentNode.right
#########################################
# Driver program to test above function #
#########################################
bst = BinarySearchTree()
# Create the tree given in the above diagram
bst.insert(20)
bst.insert(9)
bst.insert(25)
bst.insert(5)
bst.insert(12)
bst.insert(11)
bst.insert(14)
result = bst.find_largest_smaller_key(17)
print("Largest smaller number is %d " % (result))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment