解决二叉树最大路径和问题的一种常见方法是使用递归。下面是一个示例解决方案,包含代码示例:
# 定义二叉树节点类
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 辅助函数,计算以当前节点为根的最大路径和
def maxPathSumHelper(node):
if not node:
return 0
# 分别计算左子树和右子树的最大路径和
left_max = maxPathSumHelper(node.left)
right_max = maxPathSumHelper(node.right)
# 计算当前节点的最大路径和
# 如果左子树或右子树的最大路径和小于0,则不考虑该子树的路径
current_max = node.val + max(0, left_max, right_max)
# 计算包括当前节点的最大路径和
max_path = node.val + max(0, left_max) + max(0, right_max)
# 更新全局最大路径和
maxPathSumHelper.result = max(maxPathSumHelper.result, max_path)
return current_max
# 主函数,计算二叉树的最大路径和
def maxPathSum(root):
maxPathSumHelper.result = float('-inf')
maxPathSumHelper(root)
return maxPathSumHelper.result
使用以上代码,可以通过调用 maxPathSum()
函数来计算给定二叉树的最大路径和。
例如,对于以下二叉树:
1
/ \
2 3
调用 maxPathSum(root)
函数将返回 6,表示路径为 2 -> 1 -> 3 的最大和。