6-3 求二叉树中最大和的路径(递归法)
时间: 2024-06-12 19:10:32 浏览: 127
好的,我知道了。对于你的问题,可以使用递归法来解决。具体步骤如下:
1. 定义一个函数 maxPathSum(root),表示以 root 为根节点的二叉树中最大路径和。
2. 如果 root 为空节点,则返回 0。
3. 分别递归计算左右子树的最大路径和,分别记为 left 和 right。
4. 计算以 root 为根节点的最大路径和,有两种情况:
- 情况一:最大路径和经过 root 节点,即左右子树都被选中。此时,最大路径和为 root.val + left + right。
- 情况二:最大路径和不经过 root 节点,即左右子树中只有一个被选中。此时,最大路径和为 root.val + max(left, right)。
5. 返回情况一和情况二中的较大值。
下面是代码实现:
```
class Solution:
def maxPathSum(self, root: TreeNode) -> int:
self.max_sum = float('-inf')
def dfs(node):
if not node:
return 0
left = max(dfs(node.left), 0)
right = max(dfs(node.right), 0)
self.max_sum = max(self.max_sum, node.val + left + right)
return node.val + max(left, right)
dfs(root)
return self.max_sum
```
阅读全文