124. 二叉树中的最大路径和
分析
- 递归定义:
- 对于每个节点,我们通过递归计算以该节点为根的路径的最大贡献值(即该节点能为父节点提供的最大路径和)
- 贡献值的计算:
- 对于当前节点
root
:- 左子树提供的最大路径和
left = max(0, dfs(root->left))
。取0
是为了避免负贡献 - 右子树提供的最大路径和
right = max(0, dfs(root->right))
- 左子树提供的最大路径和
- 对于当前节点
- 更新全局最大路径和:
- 对于当前节点,路径和可能包含其左右子树的贡献值,因此计算路径和为:
left + root->val + right
- 更新全局变量 res:
res = max(res, left + root->val + right)
- 对于当前节点,路径和可能包含其左右子树的贡献值,因此计算路径和为:
- 返回贡献值:
- 当前节点对父节点的最大贡献值为:
root->val + max(left, right)
,只取左右子树中的一个路径,避免形成环
- 当前节点对父节点的最大贡献值为:
时间复杂度
总时间复杂度 O(n)
空间复杂度
空间复杂度为 O(h)
C++代码
|
|