Toteuta kurssimateriaalin mukainen binäärihakupuu, joka sisältää metodin remove alkion poistamiseen. Toteuta metodi kurssimateriaalissa kuvatulla tavalla.
Metodin tulee käsitellä tapaukset, jossa poistettavalla solmulla ei ole lapsia, sillä on yksi lapsi tai sillä on kaksi lasta. Jos puussa ei ole poistettavaa solmua, metodin ei tule tehdä mitään.
Toteuta tiedostoon treeremove.py luokka TreeSet seuraavan mallin mukaisesti. Tehtäväsi on täydentää metodi remove. Voit lisätä luokkaan muita tarvitsemiasi metodeja kuten metodin next.
class Node:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
class TreeSet:
def __init__(self):
self.root = None
def add(self, value):
if not self.root:
self.root = Node(value)
return
node = self.root
while True:
if node.value == value:
return
if node.value > value:
if not node.left:
node.left = Node(value)
return
node = node.left
else:
if not node.right:
node.right = Node(value)
return
node = node.right
def remove(self, value):
# TODO
def __repr__(self):
items = []
self.traverse(self.root, items)
return str(items)
def traverse(self, node, items):
if not node:
return
self.traverse(node.left, items)
items.append(node.value)
self.traverse(node.right, items)
if __name__ == "__main__":
numbers = TreeSet()
numbers.add(3)
numbers.add(2)
numbers.add(5)
numbers.add(7)
print(numbers) # [2, 3, 5, 7]
numbers.remove(3)
print(numbers) # [2, 5, 7]
numbers.remove(7)
print(numbers) # [2, 5]
numbers.remove(2)
print(numbers) # [5]
numbers.remove(5)
print(numbers) # []
