CSES - Alkion poisto

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