JAVA算法练习题day42
今天正好做完500题,一半了。
50.二叉树中的最大路径和
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):def __init__(self):self.ans = float("-inf")def maxPathSum(self, root):""":type root: Optional[TreeNode]:rtype: int"""#递归计算 每个节点的最大贡献值(以该节点为起点的路径和) = 该节点的值+max(left.val,right,val) 【左右是二选一的关系】#根据最大贡献值来计算最大路径和。最大贡献值在孩子节点上并非是二选一的。因为此时的路径不一定以根节点为起点。因此,当孩子节点的最大贡献值大于0时,才将此节点纳入路径。#获取节点的最大贡献值(获取 就是要 return的东西) 在递归的过程中添加逻辑语句实现最大路径和的求解。def nodeGain(node):if node is None:return 0#递归计算,当孩子节点的最大贡献值大于0时,才将此节点纳入路径left = max(nodeGain(node.left),0)right = max(nodeGain(node.right),0)#最大路径和nodegain = node.val + left + rightself.ans = max(nodegain,self.ans)#返回节点的最大贡献值,根据定义去写。也是递归的(孩子还有孩子,所以不是写node.left.val 否则逻辑错误,也会空指针报错)return node.val + max(left,right)nodeGain(root)return self.ans