Написал неоправданно сложное решение следующего вопроса:
Учитывая двоичное дерево и сумму, определите, есть ли у дерева путь от корня к листу так, чтобы сложить все значения вдольпуть равен заданной сумме.
В любом случае, я пытаюсь отладить то, что пошло не так.Я использовал именованный кортеж, чтобы я мог отслеживать, было ли найдено число и текущую сумму, но похоже, что текущая сумма никогда не увеличивается больше нуля.Однако на любом данном листовом узле промежуточная сумма будет значением конечного узла, и на следующей итерации текущая сумма должна быть увеличена на текущую промежуточную сумму.Кто-нибудь знает, что не так с моим "рекурсивным прыжком веры" здесь?
def root_to_leaf(target_sum, tree):
NodeData = collections.namedtuple('NodeData', ['running_sum', 'num_found'])
def root_to_leaf_helper(node, node_data):
if not node:
return NodeData(0, False)
if node_data.num_found:
return NodeData(target_sum, True)
left_check = root_to_leaf_helper(node.left, node_data)
if left_check.num_found:
return NodeData(target_sum, True)
right_check = root_to_leaf_helper(node.right, node_data)
if right_check.num_found:
return NodeData(target_sum, True)
new_running_sum = node.val + node_data.running_sum
return NodeData(new_running_sum, new_running_sum == target_sum)
return root_to_leaf_helper(tree, NodeData(0, False)).num_found
РЕДАКТИРОВАТЬ: я понимаю, что на самом деле это просто проверка, имеет ли какой-либо путь (не заканчивающийся на листе) правильное значение, но мой вопрос по-прежнему заключается в понимании того, почему промежуточная сумма не увеличивается должным образом.