Как бы вы вычислили сумму двоичного дерева рекурсивно с данным входным деревом? - PullRequest
0 голосов
/ 13 июня 2018

Привет!Мне нужна помощь в поиске способа вычисления суммы двоичного дерева рекурсивно.Я поставил то, над чем я работал, но я все еще в замешательстве.Пожалуйста, любая помощь приветствуется.

Определите рекурсивную функцию с именем sum, которая принимает двоичное дерево в качестве аргумента и возвращает int - сумму всех значений узлов в дереве.Например, для дерева внизу функция возвращает 35.

enter image description here

def sum(t: TN) -> int:
    if t == None:
        return 0
    else:
       return [sum(t.value)for v in t]

1 Ответ

0 голосов
/ 13 июня 2018

Необходимо суммировать значение текущего узла с вызовами функции рекурсивной суммы для левого и правого атрибутов узла:

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
...