求解二叉树(数字三角形)最大路径总和的最优算法是什么
二叉树最大路径和求解疑问

每个节点可拥有左、右两个子节点
上述示例中,路径[7, 3, 8, 7, 5]对应的总和为最大路径和
最初思路为每层选择值更大的子节点即可得到最优结果,验证后发现该思路并不正确,最初编写的实现代码如下:
triangle = [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] depth = 0 total = [] N = triangle[0][0]
def min_max(depth, N, total): if (depth+1) == len(triangle): return total else: a,b = triangle[depth+1][triangle[depth].index(N)], triangle[depth+1][triangle[depth].index(N)+1] total.append(max(a,b)) N = max(a,b) return min_max(depth+1, N, total)
min_max(depth, N, total) # 运行输出 [8, 1, 7, 5]
运行上述代码得到的结果为[8, 1, 7, 5],无法得到正确的最大路径和。之后考虑过枚举所有路径计算总和后比对最大值,但该方案时间复杂度过高,需要找到求解该问题的合适算法。
内容的提问来源于stack exchange,提问作者jtoyhh
相关产品推荐
相关产品推荐

