给定一个整数n叉树,任务是找到最大子序列的和,其中约束条件是序列中任意两个数字不应共享树中的公共边缘。
例如:
1
/ \
2 5
/ \
3 4
最大的非相邻和= 3 + 4 + 5 = 12
下面是在http://www.geeksforgeeks.org/maximum-sum-such-that-no-two-elements-are-adjacent中概述的算法的错误扩展?
def max_sum(node, inc_sum, exc_sum):
for child in node.children:
exc_new = max(inc_sum, exc_sum)
inc_sum = exc_sum + child.val
exc_sum = exc_new
inc_sum, exc_sum = max(max_sum(child, inc_sum, exc_sum),
max_sum(child, inc_sum, inc_sum - node.val))
return exc_sum, inc_sum
但是我不确定在返回时交换exc_sum和inc_sum是否是实现结果的正确方法,我该如何跟踪可能导致最大总和的和,例如,在左子树中,最大和是(1 + 3 + 4),而导致最终最大和的和是(3 + 4 + 5),那么(3 + 4)应该如何跟踪?是否应将所有中间和存储在表中?