Click Here to go back to the homepage.

Tree Insertion Solution:


class Node:
    def __init__(self, val):
        self.l = None
        self.r = None
        self.val = val
        self.childrenPlusSelf = 1
    
    def add(self, val):
        self.childrenPlusSelf += 1
        if val < self.val:
            if self.l == None:
                self.l = Node(val)
            else:
                self.l.add(val)
        else:
            if self.r == None:
                self.r = Node(val)
            else:
                self.r.add(val)

def factorial(n):
    fact = 1
    for i in range(1,n+1): 
        fact = fact * i
    return fact

def simplify(m, n):
    greater = m if m > n else n
    sum = m + n
    result = 1
    while sum > greater:
        result *= sum
        sum -= 1
    return result

def calculate(node):
    m = node.l.childrenPlusSelf if node.l != None else 0
    n = node.r.childrenPlusSelf if node.r != None else 0
    lesser = m if m < n else n
    result = simplify(m, n) // factorial(lesser)
    if node.l != None:
        result *= calculate(node.l)
    if node.r != None:
        result *= calculate(node.r)
    return int(result)

i = int(input())
while(i != 0):
    line = input()
    vals = list(map(int, line.split(" ")))
    root = Node(vals[0])
    for j in range(1, len(vals)):
        root.add(vals[j])
    print(calculate(root))
    i = int(input())