CSES - Puun tyhjennys

Binääripuusta poistetaan joka askeleella jokin lehti, kunnes puu on tyhjä. Monellako tavalla poistot voi toteuttaa?

Tarkastellaan esimerkkinä tehtäväpohjassa olevaa puuta:

Tässä vastaus on 8, koska mahdolliset poistotavat ovat [2,4,5,3,1], [2,5,4,3,1], [4,2,5,3,1], [4,5,2,3,1], [4,5,3,2,1], [5,2,4,3,1], [5,4,2,3,1] ja [5,4,3,2,1].

Voit olettaa, että puussa on korkeintaan 100 solmua ja että vastaus on aina korkeintaan 10^{18}.

Python

Toteuta tiedostoon cleartree.py funktio count(root), joka antaa poistotapojen määrän.

from collections import namedtuple

def count(node):
    # TODO

if __name__ == "__main__":
    Node = namedtuple("Node",["left","right"])
    tree = Node(Node(None,None),Node(Node(None,None),Node(None,None)))
    print(count(tree)) # 8

Java

Toteuta tiedostoon ClearTree.java metodi count, joka antaa poistotapojen määrän.

public class ClearTree {
    public long count(Node node) {
        // TODO
    }

    public static void main(String[] args) {
        ClearTree c = new ClearTree();
        Node tree = new Node(new Node(null,null),
                             new Node(new Node(null,null),
                                      new Node(null,null)));
        System.out.println(c.count(tree)); // 8
    }
}