鱼C论坛

 找回密码
 立即注册
查看: 69|回复: 1

二叉树的最大路径和

[复制链接]
发表于 2024-10-28 15:54:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxPathSum(self, root: Optional[TreeNode]) -> int:
        self.res = 0 #初始化全局变量
        def helper(node):
            if not node: return 0 #如果没有节点(是叶子结点),返回0
            self.res = max(self.res,(helper(node.left) + helper(node.right) + node.val)) #结果为左右子树最大权值加上根节点的值
            return max(0,max(helper(node.left),helper(node.right)) + node.val)#最大值为左右子树
        helper(root)
        return self.res

帮我逐层分析一下,尤其不懂helper函数的返回值为什么是
max(0,max(helper(node.left),helper(node.right)) + node.val)
其中,
root =
[-10,9,20,null,null,15,7]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-28 16:01:03 | 显示全部楼层
好的,我们来逐层分析这个程序,尤其是 `helper` 函数。

### 目标
我们需要找到二叉树中的最大路径和,路径可以从任何节点开始和结束。

### 程序解析

1. **类和函数定义**

class Solution:
       def maxPathSum(self, root: Optional) -> int:
           self.res = float('-inf')  # 初始化最大值为负无穷
           def helper(node):
               if not node: 
                   return 0
               ...
           ...
   `maxPathSum` 函数调用 `helper` 函数,递归计算路径和值。

2. **`helper` 函数**

def helper(node):
       if not node: 
           return 0
   - 如果 `node` 是 `None`,返回 0,因为空节点的贡献为 0。

3. **递归计算**

left = max(0, helper(node.left))
   right = max(0, helper(node.right))
   - 对于每一个 `node`,计算其左子树和右子树的最大贡献路径和。
   - `max(0, ...)` 的作用是忽略负路径,只考虑非负路径。

4. **更新全局最大路径和**

self.res = max(self.res, left + right + node.val)
   - 计算通过当前 `node` 的路径和,包括其值、左子树贡献和右子树贡献,并更新全局最大值 `self.res`。

5. **返回值**

return max(left, right) + node.val
   - 返回以当前节点为根的最大路径贡献,即当前节点值加上左/右子树中较大的路径贡献。
   - 这个返回值供递归调用的父节点使用。

### 总结

- `helper` 函数的返回值并不是当前节点的最大路径和,而是给父节点提供的最大路径贡献值。
- `self.res` 是全局变量,存储到目前为止的最大路径和,包括从任意节点开始和结束的路径。

这种方法有效利用了递归遍历了二叉树的所有节点,最后我们得到了最大路径和。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表