Added delete function

This commit is contained in:
Pablo 2017-10-28 16:17:55 -03:00
parent ad935df161
commit 54700f2c8f

View File

@ -1,13 +1,14 @@
''' '''
A binary search Tree A binary search Tree
''' '''
class Node: class Node:
def __init__(self, label): def __init__(self, label, parent):
self.label = label self.label = label
self.left = None self.left = None
self.right = None self.right = None
#Added in order to delete a node easier
self.parent = parent
def getLabel(self): def getLabel(self):
return self.label return self.label
@ -27,6 +28,11 @@ class Node:
def setRight(self, right): def setRight(self, right):
self.right = right self.right = right
def getParent(self):
return self.parent
def setParent(self, parent):
self.parent = parent
class BinarySearchTree: class BinarySearchTree:
@ -35,13 +41,12 @@ class BinarySearchTree:
def insert(self, label): def insert(self, label):
# Create a new Node # Create a new Node
new_node = Node(label) new_node = Node(label, None)
# If Tree is empty # If Tree is empty
if self.empty(): if self.empty():
self.root = new_node self.root = new_node
else: else:
#If Tree is not empty #If Tree is not empty
parent_node = None
curr_node = self.root curr_node = self.root
#While we don't get to a leaf #While we don't get to a leaf
while curr_node is not None: while curr_node is not None:
@ -58,8 +63,14 @@ class BinarySearchTree:
if new_node.getLabel() < parent_node.getLabel(): if new_node.getLabel() < parent_node.getLabel():
parent_node.setLeft(new_node) parent_node.setLeft(new_node)
else: else:
parent_node.setRight(new_node) parent_node.setRight(new_node)
#Set parent to the new node
new_node.setParent(parent_node)
'''
def delete(self):
if (not self.empty()):
if()
'''
def getNode(self, label): def getNode(self, label):
curr_node = None curr_node = None
#If the tree is not empty #If the tree is not empty
@ -78,6 +89,24 @@ class BinarySearchTree:
curr_node = curr_node.getRight() curr_node = curr_node.getRight()
return curr_node return curr_node
def getMax(self):
#We go deep on the right branch
curr_node = None
if(not self.empty()):
curr_node = self.getRoot()
while(curr_node.getRight() is not None):
curr_node = curr_node.getRight()
return curr_node
def getMin(self):
#We go deep on the left branch
curr_node = None
if(not self.empty()):
curr_node = self.getRoot()
while(curr_node.getLeft() is not None):
curr_node = curr_node.getLeft()
return curr_node
def empty(self): def empty(self):
if self.root is None: if self.root is None:
return True return True
@ -92,19 +121,19 @@ class BinarySearchTree:
def getRoot(self): def getRoot(self):
return self.root return self.root
'''
Example
8
/ \
3 10
/ \ \
1 6 14
/ \ /
4 7 13
'''
def testBinarySearchTree():
'''
Example
8
/ \
3 10
/ \ \
1 6 14
/ \ /
4 7 13
'''
if __name__ == "__main__":
t = BinarySearchTree() t = BinarySearchTree()
t.insert(8) t.insert(8)
t.insert(3) t.insert(3)
@ -128,3 +157,9 @@ if __name__ == "__main__":
else: else:
print("The label -1 doesn't exist") print("The label -1 doesn't exist")
if(not t.empty()):
print("Max Value: ", t.getMax().getLabel())
print("Min Value: ", t.getMin().getLabel())
if __name__ == "__main__":
testBinarySearchTree()