124. 二叉树中的最大路径和

class Solution:
    def maxPathSum(self, root: TreeNode) -> int:
        """
        解决这题的主要思路是分断考虑+递归
        最大路径和的取得有三种情况:
        1. 当前root结点和左右贡献的和,注意,左右贡献为负数就初始化为0
        2. 当前root结点不参与路径,左子树贡献最大路径和
        3. 当前root结点不参与路径,右子树贡献最大路径和
        """
        res = float("-inf")
        def dfs(root):
            nonlocal res  #  定义嵌套函数空间中的变量
            if not root:
                return 0
            left_max_val = max(0, dfs(root.left))  #  计算左子树的最大路径和
            right_max_val = max(0, dfs(root.right))  #  计算右子树的最大路径和
            cur_max_val = root.val + left_max_val + right_max_val  #  当前root为根结点的最大路径和
            res = max(res, cur_max_val)  #  此处最重要,判断当前root为根节点的路径和大,还是上一层的路径和大
            return root.val + max(left_max_val, right_max_val) 
            """  
            这里之所以这样返回值,是因为如果以root的上层结点为根节点,那么当前root结点就只能取一条路径,
            要么root -> left, 要么root -> right。例如图中,若当前root = 20,那么root对于上层结点-10的贡献
            就只能是20->15或者20->7,从而构成9 -> -10 -> 20 -> 15或者9 -> -10 -> 20 -> 7。所以dfs(root = 20)的
            返回值就只能是root.val + max(left_max_val, right_max_val)。
            """
        dfs(root)
        return res

图片说明

全部评论

相关推荐

不知道怎么取名字_:两个方向 1.简历针对性准备下 2.面试前也需要准备的 主要还是要看各个公司需求,看公司行业和岗位描述,那里面已经写了对技术的需求,一份简历,不可能和所有嵌入式岗位都匹配的
投递北京经纬恒润科技股份有限公司等公司6个岗位
点赞 评论 收藏
分享
11-23 15:14
中原工学院 Java
程序员花海_:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务