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) # []