From 3ead193f0eb74e92cb6f719b7618b47e89b35fa6 Mon Sep 17 00:00:00 2001 From: Rafael Date: Tue, 4 Jul 2017 18:48:27 +0200 Subject: [PATCH] Done Node and Insert method --- data_structures/AVL/AVL.py | 106 +++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 data_structures/AVL/AVL.py diff --git a/data_structures/AVL/AVL.py b/data_structures/AVL/AVL.py new file mode 100644 index 000000000..1c59862a6 --- /dev/null +++ b/data_structures/AVL/AVL.py @@ -0,0 +1,106 @@ +''' +A AVL tree +''' + + +class Node: + + def __init__(self, label): + self.label = label + self.left = None + self.rigt = None + self.parent = None + self.height = 0 + + def getLabel(self): + return self.label + + def setLabel(self, label): + self.label = label + + def getLeft(self): + return self.left + + def setLeft(self, left): + self.left = left + + def getRight(self): + return self.rigt + + def setRight(self, right): + self.rigt = right + + def getParent(self): + return self.parent + + def setParent(self, parent): + self.parent = parent + + def setHeight(self, height): + self.height = height + + def getHeight(self, height): + return self.height + + +class AVL: + + def __init__(self): + self.root = None + self.size = 0 + + # def __init__(self, root): + # self.root = root + # self.size = 1 + + def insert(self, value): + node = Node(value) + if self.root is None: + self.root = node + self.size = 1 + else: + # Same as Binary Tree + dad_node = None + curr_node = self.root + + while True: + if curr_node is not None: + + dad_node = curr_node + + if node.getLabel() < curr_node.getLabel(): + curr_node = curr_node.getLeft() + else: + curr_node = curr_node.getRight() + else: + if node.getLabel() < dad_node.getLabel(): + dad_node.setLeft(node) + dad_node.setHeight(dad_node.getHeight() + 1) + + if (dad_node.getRight().getHeight() - + dad_node.getLeft.getHeight() > 1): + self.rebalance(dad_node) + + else: + dad_node.setRight(node) + dad_node.setHeight(dad_node.getHeight() + 1) + + if (dad_node.getRight().getHeight() - + dad_node.getLeft.getHeight() > 1): + self.rebalance(dad_node) + break + + def rebalance(self, node): + pass + + def rotate_left(self, node): + pass + + def rotate_right(self, node): + pass + + def double_rotate_left(self, node): + pass + + def double_rotate_righs(self, node): + pass