python实现leetcode之124. 二叉树中的最大路径和

2021-10-05  本文已影响0人  深圳都这么冷

解题思路

定义一个辅助函数返回两个值:
1.只包含一个方向(左右)的最大路径
2.包含两个方向(左和右)的最大路径
由于至少包含一个节点,所以如果ls和rs都是0时,必须包含当前节点
total取局部最大值。但也是必须要包含节点的

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

代码

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def maxPathSum(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        return m(root)[1]


def m(tree):
    """
    single: 只包含一个方向(左右)的最大路径
    total : 包含两个方向(左和右)的最大路径
    """
    if not tree: return 0, 0
    ls, lt = m(tree.left)
    rs, rt = m(tree.right)
    single = tree.val+max(0, ls, rs)
    if ls > 0 and rs > 0:
        total = tree.val + ls + rs
    else:
        total = single
    if tree.left and lt > total: total = lt
    if tree.right and rt > total: total = rt
    return single, total
效果图
上一篇下一篇

猜你喜欢

热点阅读