LeetCode Binary Tree Maximum Path Sum
2016-05-10 19:47
295 查看
LeetCode解题之Binary Tree Maximum Path Sum
原题
求一棵二叉树中最大的路径和。该路径可以是二叉树中某一节点到树中任意一个节点的所经过的路径,不允许重复经过一个节点,不必经过根节点。注意点:
无
例子:
输入:
1 / \ 2 3
输出: 6
解题思路
采用递归的方法,我们知道一条路径必定有一个节点最接近根节点,而该条路径的和就是这个节点的值加上它左右路径的和。我们现在要求最大路径和,那么就要分别得到左右两条路径的最大和。而左路径的最大和为左节点的值加上它左右路径中较大的路径和,右路径最大和为右节点的值加上它左右路径中较大的路径和。注意如果某条子路径的和为负,应该将该条子路径直接砍掉。AC源码
# 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 """ self.maxSum = float('-inf') self._maxPathSum(root) return self.maxSum def _maxPathSum(self, root): if root is None: return 0 left = self._maxPathSum(root.left) right = self._maxPathSum(root.right) left = left if left > 0 else 0 right = right if right > 0 else 0 self.maxSum = max(self.maxSum, root.val + left + right) return max(left, right) + root.val
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
相关文章推荐
- Matlab学习 之 文件操作
- 郑轻 1478 Metric Matrice (第五届河南省赛)
- iframe.js
- 互联网的狼性与挖井
- git 教程之第一次fork别人的库到本地步骤
- SSH的密钥转换
- 由mmap引发的SIGBUS
- LeetCode-11. Container With Most Water
- java 类似QQ的本地聊天室程序实现(上)(客户端程序)
- R语言常用包分类总结
- flask笔记:6:用户登入登出
- 概念应用
- linux 内存管理qqq
- JQuery datatables测试!
- [LeetCode82]Remove Duplicates from Sorted List II
- Android 开发经验(转)
- asin数学函数应用实例
- iOS中不同形式的图文混排技术的实现总结
- C#入门之流程控制练习题(排序)
- 第十、十一周项目1:阅读程序,写出执行结果(3)