【LeetCode with Python】 Binary Tree Maximum Path Sum

博客域名: http://www.xnerv.wang
原题页面: https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/
题目类型:二叉树
难度评价:★
本文地址: http://blog.csdn.net/nerv3x3/article/details/31487859

Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

For example:
Given the below binary tree,

       1
      / \
     2   3

Return 6.


本是比较简单的一道二叉树递归算法题目,也花了一些时间。主要还是在题意的理解中,本题要求的“最大路径和”,不一定经过了root,起点和终点可以是同一个点(即整个路径只有一个点)。
注意用一个类成员变量max来记录搜索过程中出现过的最大路径和,最后需要返回的就是这个max值。
此外还有一点容易搞错,当一棵子树计算完退栈时,向上一层返回的应该是该子树左路径、右路径中的最大值,而不是该子树中的“最大路径和”,因为从父节点搜索进入该子树时,只能选择其左分支或者右分治进入。


class Solution:
    def __init__(self):
        self.max = None

    def doMaxPathSum(self, root):
        if None == root:
            return 0
        left_sum = self.doMaxPathSum(root.left)
        right_sum = self.doMaxPathSum(root.right)
        max_left_sum = max(left_sum, 0)
        max_right_sum = max(right_sum, 0)
        cur_max = max_left_sum + max_right_sum + root.val
        if None == self.max or cur_max > self.max:
            self.max = cur_max
        return max(max_left_sum + root.val, max_right_sum + root.val)

    # @param root, a tree node
    # @return an integer
    def maxPathSum(self, root):
        self.doMaxPathSum(root)
        return self.max

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值