aed/estrutura_de_dados/arvores/binary.py

114 lines
2.9 KiB
Python

import treelib
class Node():
def __init__(self, val):
self.val = val
self.right = None
self.left = None
class BinaryTree():
def __init__(self, root):
self.root = root
def insert_callable(self, val):
self.root = self.__insert(val, self.root)
def __insert(self, val, node):
if not node:
node = Node(val)
return node
elif val < node.val:
node.left = self.__insert(val, node.left)
return node
elif val > node.val:
node.right = self.__insert(val, node.right)
return node
else:
raise Exception('This element already exist!')
def search_callable(self, val):
return self.__search(val, self.root)
def set_less(self, node_left, node_right):
if not node_right:
return node_left
else:
node_right.left = self.set_less(node_left, node_right.left)
return node_right
def __search(self, val, node):
if not node:
return False
elif node.val == val:
return True
elif val < node.val:
return self.__search(val, node.left)
else:
return self.__search(val, node.right)
def remove_callable(self, val):
self.root = self.__remove(val, self.root)
def __remove(self, val, node):
if not node:
raise Exception('Value not found!')
elif node.val == val:
return self.set_less(node.left, node.right)
elif val < node.val:
node.left = self.__remove(val, node.left)
return node
else:
node.right = self.__remove(val, node.right)
return node
def show_callable(self):
tree = treelib.Tree()
tree = self.__show(tree, self.root)
tree.show()
def __show(self, tree, node):
if not node:
return tree
else:
if node.left:
tree = self.__show(tree, node.left)
tree.create_node(node.left.val, node.left.val, parent=node.val)
if node.right:
tree = self.__show(tree, node.right)
tree.create_node(node.right.val, node.right.val, parent=node.val)
return tree
if __name__ == '__main__':
tree = BinaryTree(Node(10))
tree.insert_callable(1)
tree.insert_callable(4)
tree.insert_callable(0)
tree.insert_callable(14)
tree.insert_callable(22)
tree.remove_callable(14)
print(tree.search_callable(1))
print(tree.search_callable(13))
print(tree.search_callable(4))
print(tree.search_callable(0))
print(tree.search_callable(14))
#print(tree.search_callable(22))
#print(tree.search_callable(12))
#print(tree.search_callable(15))
#print(tree.search_callable(16))
#print(tree.search_callable(-1))
#
#tree.show_callable()