#!/usr/bin/python3 class Node: def __init__(self, op, left=None, right=None): self.op = op # Buď číslo nebo jméno operátoru self.left = left self.right = right def __str__(self): if type(self.op) is int: return str(self.op) else: return '(' + str(self.left) + self.op + str(self.right) + ')' def print_tree(self, level=0): if self.right is not None: self.right.print_tree(level+1) print(" "*level, self.op) if self.left is not None: self.left.print_tree(level+1) def eval(self): op = self.op if type(op) is int: return self.op else: l = self.left.eval() r = self.right.eval() if op == '+': return l + r if op == '-': return l - r if op == '*': return l * r if op == '/': return l // r raise NotImplementedError() x = Node('+', Node('*', Node(3), Node(4)), Node('-', Node(5), Node(6))) print(x) x.print_tree() print(x.eval())