CSES - Alipuut

Tehtäväsi on muodostaa lista, joka sisältää puun solmujen alipuiden koot pienimmästä suurimpaan.

Esimerkiksi alla olevassa puussa listan haluttu sisältö on [1,1,1,1,2,3,7][1, 1, 1, 1, 2, 3, 7]. Puussa on neljä lehteä, joissa alipuun koko on 11. Solmun 22 alipuun koko on 22, solmun 44 alipuun koko on 33 ja solmun 11 alipuun koko on 77.

Toteuta tiedostoon subtrees.py funktio count_subtrees, jolle annetaan parametrina viittaus puun juurisolmuun. Funktio palauttaa listana solmujen alipuiden koot.

class Node:
    def __init__(self, value, children=None):
        self.value = value
        self.children = children if children else []

    def __repr__(self):
        if self.children == []:
            return f"Node({self.value})"
        else:
            return f"Node({self.value}, {self.children})"

def count_subtrees(node):
    # TODO

if __name__ == "__main__":
    tree1 = Node(1, [Node(4, [Node(3), Node(7)]),
                     Node(5),
                     Node(2, [Node(6)])])
    print(count_subtrees(tree1)) # [1, 1, 1, 1, 2, 3, 7]

    tree2 = Node(1, [Node(2, [Node(3, [Node(4)])])])
    print(count_subtrees(tree2)) # [1, 2, 3, 4]

    tree3 = Node(1, [Node(2), Node(3), Node(4)])
    print(count_subtrees(tree3)) # [1, 1, 1, 4]