Необходимо суммировать значение текущего узла с вызовами функции рекурсивной суммы для левого и правого атрибутов узла:
class Tree:
def __init__(self, **kwargs):
self.__dict__ = {i:kwargs.get(i) for i in ['left', 'value', 'right']}
def __bool__(self):
return True
@classmethod
def binary_sum(cls, _node):
if _node:
return cls.binary_sum(getattr(_node, 'left', 0)) + _node.value+cls.binary_sum(getattr(_node, 'right', 0))
return 0
t = Tree(value = 6, left=Tree(value=3, left = Tree(value=2)), right = Tree(value = 8, left=Tree(value=7), right=Tree(value=9)))
print(Tree.binary_sum(t))
Вывод:
35