Finished delete function and added some prints functions too

This commit is contained in:
Pablo 2017-10-28 18:33:14 -03:00
parent f766bb4216
commit 9d8824658a

View File

@ -85,9 +85,12 @@ class BinarySearchTree:
self.__reassignNodes(node, node.getLeft()) self.__reassignNodes(node, node.getLeft())
#Has two children #Has two children
else: else:
#Gets the max value of the left branch
tmpNode = self.getMax(node.getLeft()) tmpNode = self.getMax(node.getLeft())
#Deletes the tmpNode
self.delete(tmpNode.getLabel()) self.delete(tmpNode.getLabel())
self.__reassignNodes(node, tmpNode) #Assigns the value to the node to delete and keesp tree structure
node.setLabel(tmpNode.getLabel())
def getNode(self, label): def getNode(self, label):
curr_node = None curr_node = None
@ -135,11 +138,13 @@ class BinarySearchTree:
return True return True
return False return False
def preShow(self, curr_node): def __InOrderTraversal(self, curr_node):
nodeList = []
if curr_node is not None: if curr_node is not None:
print(curr_node.getLabel()) nodeList.insert(0, curr_node)
self.preShow(curr_node.getLeft()) nodeList = nodeList + self.__InOrderTraversal(curr_node.getLeft())
self.preShow(curr_node.getRight()) nodeList = nodeList + self.__InOrderTraversal(curr_node.getRight())
return nodeList
def getRoot(self): def getRoot(self):
return self.root return self.root
@ -149,19 +154,44 @@ class BinarySearchTree:
return True return True
return False return False
def __reassignNodes(self,node, newChildren): def __reassignNodes(self, node, newChildren):
if(newChildren is not None): if(newChildren is not None):
newChildren.setParent(node.getParent()) newChildren.setParent(node.getParent())
if(node.getParent() is not None): if(node.getParent() is not None):
#If it is the Right Children #If it is the Right Children
if(self.__isRightChildren(node)):a if(self.__isRightChildren(node)):
node.getParent().setRight(newChildren) node.getParent().setRight(newChildren)
else: else:
#Else it is the left children #Else it is the left children
node.getParent().setLeft(newChildren) node.getParent().setLeft(newChildren)
#This function traversal the tree. By default it returns an
#In order traversal list. You can pass a function to traversal
#The tree as needed by client code
def traversalTree(self, traversalFunction = None, root = None):
if(traversalFunction is None):
#Returns a list of nodes in preOrder by default
return self.__InOrderTraversal(self.root)
else: else:
#It is the root of the tree #Returns a list of nodes in the order that the users wants to
node.setLabel(newChildren.getLabel()) return traversalFunction(self.root)
#Returns an string of all the nodes labels in the list
#In Order Traversal
def __str__(self):
list = self.__InOrderTraversal(self.root)
str = ""
for x in list:
str = str + " " + x.getLabel().__str__()
return str
def InPreOrder(curr_node):
nodeList = []
if curr_node is not None:
nodeList = nodeList + InPreOrder(curr_node.getLeft())
nodeList.insert(0, curr_node.getLabel())
nodeList = nodeList + InPreOrder(curr_node.getRight())
return nodeList
def testBinarySearchTree(): def testBinarySearchTree():
''' '''
@ -179,16 +209,12 @@ def testBinarySearchTree():
Example After Deletion Example After Deletion
7 7
/ \ / \
3 14 1 4
/ \
1 6
/
4
''' '''
t = BinarySearchTree() t = BinarySearchTree()
t.insert(8) t.insert(8)
t.insert(3) t.insert(3)
t.insert(10)
t.insert(6) t.insert(6)
t.insert(1) t.insert(1)
t.insert(10) t.insert(10)
@ -197,7 +223,8 @@ def testBinarySearchTree():
t.insert(4) t.insert(4)
t.insert(7) t.insert(7)
t.preShow(t.getRoot()) #Prints all the elements of the list in order traversal
print(t.__str__())
if(t.getNode(6) is not None): if(t.getNode(6) is not None):
print("The label 6 exists") print("The label 6 exists")
@ -216,8 +243,15 @@ def testBinarySearchTree():
t.delete(13) t.delete(13)
t.delete(10) t.delete(10)
t.delete(8) t.delete(8)
t.delete(3)
t.delete(6)
t.delete(14)
t.preShow(t.getRoot()) #Gets all the elements of the tree In pre order
#And it prints them
list = t.traversalTree(InPreOrder, t.root)
for x in list:
print(x)
if __name__ == "__main__": if __name__ == "__main__":
testBinarySearchTree() testBinarySearchTree()