75 lines
1.8 KiB
Python
75 lines
1.8 KiB
Python
class Node:
|
|
def __init__(self, key, value, left=None, right=None, height=0):
|
|
self.key = key
|
|
self.value = value
|
|
self.left = left
|
|
self.right = right
|
|
self.height = height
|
|
|
|
class AVLTreeMap:
|
|
def __init__(self, node):
|
|
self.root = root
|
|
|
|
# Data related operations
|
|
def put(self, key, value):
|
|
# go until we find a good place to put our dank value
|
|
curr = self.root
|
|
while True:
|
|
# going left maybe
|
|
if key < curr.key:
|
|
# see if we can stop now
|
|
if curr.left is None:
|
|
curr.left = Node(key, value)
|
|
break
|
|
if curr.right is None:
|
|
curr.right = Node(key, value)
|
|
break
|
|
|
|
def get(self, key):
|
|
curr = self.root
|
|
|
|
if curr is None:
|
|
return None
|
|
|
|
# check if we found the thing
|
|
if key == curr.key:
|
|
return curr
|
|
|
|
if key < curr.key:
|
|
get(curr.left)
|
|
else:
|
|
get(curr.right)
|
|
|
|
def remove(self,key):
|
|
pass
|
|
|
|
def levelOrder(self):
|
|
# Return case
|
|
if node == None:
|
|
return
|
|
|
|
# Go left
|
|
self.levelOrder(node.left)
|
|
|
|
# Visit
|
|
print(f'{node.value} ', end='')
|
|
|
|
# Go right
|
|
self.levelOrder(node.right)
|
|
|
|
|
|
# tree related operations
|
|
def rotateLeft(self, node):
|
|
pass
|
|
def rotateRight(self,node):
|
|
pass
|
|
# returns the height of a _node_ not the whole tree
|
|
def getHeight(self, node):
|
|
pass
|
|
|
|
# returns node balance
|
|
def getBalance(self, node):
|
|
_left = 0 if node.left is None else node.left.height
|
|
_right = 0 if node.right is None else node.right.height
|
|
return _left - right
|