Skip to content

Implemented static type checking to avl_tree.py #2295

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 37 additions & 35 deletions data_structures/binary_tree/avl_tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@
import random


class my_queue:
def __init__(self):
self.data = []
class MyQueue:
def __init__(self) -> None:
self.data: list[str, int, float] = []
self.head = 0
self.tail = 0

def is_empty(self):
return self.head == self.tail

def push(self, data):
def push(self, data: int) -> None:
self.data.append(data)
self.tail = self.tail + 1

Expand All @@ -31,18 +31,20 @@ def pop(self):
def count(self):
return self.tail - self.head

def print(self):
print(self.data)
print("**************")
print(self.data[self.head : self.tail])
def __str__(self) :
return str(self.data)


class my_node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
self.height = 1
class Node:
"""
This is the Class Node with a constructor that contains data variable to type data
height type in and left, right pointers.
"""
def __init__(self, data: int) -> None:
self.data: int = data
self.left: Node = None
self.right: Node = None
self.height: int = 1

def get_data(self):
return self.data
Expand All @@ -56,24 +58,24 @@ def get_right(self):
def get_height(self):
return self.height

def set_data(self, data):
def set_data(self, data: int) -> None:
self.data = data
return

def set_left(self, node):
self.left = node
def set_left(self, node) -> None:
self.left: Node = node
return

def set_right(self, node):
def set_right(self, node) -> None:
self.right = node
return

def set_height(self, height):
self.height = height
def set_height(self, height: int) -> None:
self.height: int = height
return


def get_height(node):
def get_height(node: Node):
if node is None:
return 0
return node.get_height()
Expand All @@ -85,7 +87,7 @@ def my_max(a, b):
return b


def right_rotation(node):
def right_rotation(node: Node):
r"""
A B
/ \ / \
Expand All @@ -107,7 +109,7 @@ def right_rotation(node):
return ret


def left_rotation(node):
def left_rotation(node: Node):
"""
a mirror symmetry rotation of the left_rotation
"""
Expand All @@ -122,7 +124,7 @@ def left_rotation(node):
return ret


def lr_rotation(node):
def lr_rotation(node: Node):
r"""
A A Br
/ \ / \ / \
Expand All @@ -137,14 +139,14 @@ def lr_rotation(node):
return right_rotation(node)


def rl_rotation(node):
def rl_rotation(node: Node):
node.set_right(right_rotation(node.get_right()))
return left_rotation(node)


def insert_node(node, data):
def insert_node(node: Node, data: int):
if node is None:
return my_node(data)
return Node(data)
if data < node.get_data():
node.set_left(insert_node(node.get_left(), data))
if (
Expand All @@ -168,19 +170,19 @@ def insert_node(node, data):
return node


def get_rightMost(root):
def get_rightMost(root: Node):
while root.get_right() is not None:
root = root.get_right()
return root.get_data()


def get_leftMost(root):
def get_leftMost(root: Node):
while root.get_left() is not None:
root = root.get_left()
return root.get_data()


def del_node(root, data):
def del_node(root: Node, data: int):
if root.get_data() == data:
if root.get_left() is not None and root.get_right() is not None:
temp_data = get_leftMost(root.get_right())
Expand Down Expand Up @@ -256,18 +258,18 @@ class AVLtree:
*************************************
"""

def __init__(self):
self.root = None
def __init__(self) -> None:
self.root: Node = None

def get_height(self):
# print("yyy")
return get_height(self.root)

def insert(self, data):
def insert(self, data: int) -> None:
print("insert:" + str(data))
self.root = insert_node(self.root, data)

def del_node(self, data):
def del_node(self, data: int) -> None:
print("delete:" + str(data))
if self.root is None:
print("Tree is empty!")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Algorithmic functions/methods should not print() as discussed in CONTRIBUTING.md. Please raise an appropriate exception instead.

Expand All @@ -276,7 +278,7 @@ def del_node(self, data):

def __str__(self): # a level traversale, gives a more intuitive look on the tree
output = ""
q = my_queue()
q = MyQueue()
q.push(self.root)
layer = self.get_height()
if layer == 0:
Expand Down