For the code below I wrote for Binary Search Tree, I get the error delete_node(curr,value) NameError: global name 'delete_node' is not defined. I am wondering why this will be the case for static method which is called from the instance method delete(self,value) . Why does it not work as a static method? I am calling it from a instance method 'delete' so does it does not require access to instance members explicitly.
class Node:
def __init__(self,value=None):
self.value = value
self.left = None
self.right = None
class BST:
def __init__(self,value=None):
self.root = Node(value)
@staticmethod
def delete_node(node,value):
if node is None:
return node
if value > node.value:
node.right = delete_node(node.right,value)
elif value < node.value:
node.left = delete_node(node.left,value)
else:
if node.left is None and node.right is None:
node = None
return None
elif node.left is None:
temp = node.right
node = None
return temp
elif node.right is None:
temp = node.left
node = None
return temp
else:
#min_value = get_min(node.right)
node.value = get_min(node.right)
node.right = delete_node(node.right,node.value)
def delete(self,value):
if self.root == None:
return
curr = self.root
delete_node(curr,value)
def get_min(node):
curr = node
while curr.left:
curr = curr.left
return curr.value
if __name__ == '__main__':
tree = BST(5)
tree.delete(5)