博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode: Binary Tree Maximum Path Sum
阅读量:6720 次
发布时间:2019-06-25

本文共 917 字,大约阅读时间需要 3 分钟。

思路

这道题目非常考验对递归的理解。

对于任何一个节点,为了求出以它为根的子树的max path sum,暂称为globalMax,我们需要考虑以下情况:

  1. 经过该点的有左右孩子的子树的max sum。在这种情况下,这个局域max path sum是不可以给root的夫节点使用的。

  2. 经过该点只有左或者右孩子的path。此种情况下,这个局域max path sum可以与父节点的root.val叠加产生更长的path。

    所以,globalMax = max(case1, case2)

通过以上分析,我们发现,能够有‘递’和‘归’步骤的,是case2. 通过case2,我们也可以求出case1。所以,我们的递归公式,可以基于case2,返回可以为上一层使用的max path sum。同时,我们需要一个全局变量,来记录所有的globalMax.

代码

class Solution(object):    def maxPathSum(self, root):        """        :type root: TreeNode        :rtype: int        """              self.globalMax = float('-inf')        def getLocalMax(root):            if root is None:                return 0            leftMax = getGlobalMax(root.left)            rightMax = getGlobalMax(root.right)            self.globalMax = max(self.globalMax, leftMax + root.val+ rightMax)            return max(0, max(leftMax, rightMax) + root.val)                getLocalMax(root)        return self.globalMax

转载地址:http://ecjmo.baihongyu.com/

你可能感兴趣的文章
bzoj 1433: [ZJOI2009]假期的宿舍 最大流
查看>>
常用下载地址
查看>>
指针知识(八):函数指针
查看>>
汇编语言入门
查看>>
java,c#,php类与继承简单比较
查看>>
虚拟机下Ubuntu共享文件夹不能显示的一种解决方法
查看>>
xuezhan.org 6.25
查看>>
OpenResty和Resis一些基本的性能配置
查看>>
三星安装JAVA游戏
查看>>
2016y8m16d
查看>>
2016y9m5d
查看>>
java中this语句来调用其他构造方法的规则
查看>>
莎士比亚十四行诗29赏析
查看>>
Python并发编程之多进程(实战)
查看>>
[原创]关于easyui下datagrid表格控件分页控制(非url方式)
查看>>
数值优化 - 牛顿法
查看>>
python编码问题总结
查看>>
DateTimeUtil 工具类,android 和 java 通用
查看>>
Flipkart: 携手 Android Go 拥抱印度市场
查看>>
【模板】杜教筛(Sum)
查看>>