您的位置:首页 > 编程语言 > Python开发

【LeetCode with Python】 Binary Tree Maximum Path Sum

2014-06-16 22:46 609 查看
博客域名:http://www.xnerv.wang

原题页面:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/

题目类型:二叉树

难度评价:★

本文地址:/article/1377523.html

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: