Toteuta kurssimateriaalin mukainen binäärihakupuu, joka sisältää metodit prev
ja next
edellisen ja seuraavan alkion hakemiseen. Toteuta metodit kurssimateriaalissa kuvatulla tavalla.
Metodin prev
tulee palauttaa suurin alkio, joka on pienempi kuin parametrina annettu alkio. Vastaavasti metodin next
tulee palauttaa pienin alkio, joka on suurempi kuin parametrina annettu alkio. Jos haluttua alkiota ei ole olemassa, metodien tulee palauttaa None
.
Toteuta tiedostoon prevnext.py
luokka TreeSet
seuraavan mallin mukaisesti. Tehtäväsi on täydentää metodit prev
ja next
. Et saa lisätä luokkaan muita metodeja kuin tehtäväpohjassa olevat.
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 prev(self, value): # TODO def next(self, value): # TODO if __name__ == "__main__": numbers = TreeSet() numbers.add(3) numbers.add(2) numbers.add(5) numbers.add(7) print(numbers.prev(5)) # 3 print(numbers.prev(4)) # 3 print(numbers.prev(3)) # 2 print(numbers.prev(2)) # None print(numbers.next(4)) # 5 print(numbers.next(5)) # 7 print(numbers.next(6)) # 7 print(numbers.next(7)) # None