class BinaryTree:
    def __init__(self, left=None, right=None):
        self.left = left
        self.right = right

    def __str__(self):
        left = "" if self.left is None else self.left.__str__()
        right = "" if self.right is None else self.right.__str__()
        return f"({left})({right})"

    def count_leaves(self):
        cnt = 1 if self.left is None else self.left.count_leaves()
        cnt += 1 if self.right is None else self.right.count_leaves()
        return cnt
        
def parse(par):
    i, c = 1, 1
    while c != 0:
        c += 1 if par[i] =='(' else -1
        i += 1
    return (par[1: i - 1], par[i + 1: -1])

def make_tree(s):
    l, r = parse(s)
    left = None if l == "" else make_tree(l)
    right = None if r == "" else make_tree(r)
    return BinaryTree(left, right) 
    
b = BinaryTree(BinaryTree(), BinaryTree(BinaryTree(), None ) )
s = str(b)
print(s)
print(b.count_leaves())
bb = make_tree(s)
print(bb)

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: