Kurssimateriaalin binäärihakupuun toteutuksessa metodi __repr__ muodostaa lineaarisessa ajassa listan, joka sisältää puun alkiot pienimmästä suurimpaan.
Tehtäväsi on toteuttaa tämä metodi uudestaan ilman rekursiota. Metodin tulee antaa sama tulos kuin ennenkin, ja sen tulee toimia edelleen lineaarisessa ajassa.
Et saa vertailla metodissa puun solmuissa olevia arvoja, vaan lista tulee rakentaa sen perusteella, mikä on solmujen järjestys puussa.
Toteuta tiedostoon traversal.py luokka TreeSet seuraavan mallin mukaisesti. 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 __repr__(self):
# TODO
if __name__ == "__main__":
numbers = TreeSet()
numbers.add(4)
numbers.add(1)
numbers.add(2)
numbers.add(5)
numbers.add(8)
numbers.add(7)
print(numbers) # [1, 2, 4, 5, 7, 8]
