leetcode:Binary Tree Maximum Path Sum
来源:互联网 发布:网络传销诈骗标语 编辑:程序博客网 时间:2024/06/11 21:39
求出二叉树中的最大路径和
假设节点A是二叉树中最大路径和经过的节点,而且是深度最小的节点,也就是如图
A
/ \
L R
因为已经知道上图A节点是最大路径和的经过节点,那么可以知道,节点A的L子树路径和必然是最大的,同理
可推R子树也是最大的;当且仅当L、R子树返回的是正数
对于L子树,如果返回的和是负数,那么节点A就无需考虑L子树的值,因为这样子会是和变小,同理可知R子树。
以上的假设是在A是在于最大路径和中,但是对于所有的节点node,他需要向他的父节点返回经过他的路径的最大
数值和,题目要求是单起点单终点的,所以当A返回时,它需要判断他返回是L+A,还是R+A、或A(L、R均为负)
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { static int ans = Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { ans = Integer.MIN_VALUE; seek(root); return ans; } int seek(TreeNode node){ if(node == null){ return 0; } else{ int leftSum = seek(node.left); int rightSum = seek(node.right); if(leftSum >= 0){ if(rightSum >= 0){ ans = Math.max(ans, rightSum + leftSum + node.val); int maxOne = Math.max(rightSum, leftSum); return maxOne + node.val >= 0 ? maxOne + node.val: 0; } } else if(rightSum >= 0){ ans = Math.max(ans, rightSum + node.val); return rightSum + node.val >= 0? rightSum + node.val : 0; } ans = Math.max(ans, node.val); return node.val >= 0 ? node.val: 0; } }}
0 0
- *****(leetcode) Binary Tree Maximum Path Sum (tree)
- LeetCode Binary Tree Maximum Path Sum
- [Leetcode] Binary Tree Maximum Path Sum
- [leetcode] Binary Tree Maximum Path Sum
- LeetCode Binary Tree Maximum Path Sum
- [LeetCode] Binary Tree Maximum Path Sum
- leetcode Binary Tree Maximum Path Sum
- 【leetcode】Binary Tree Maximum Path Sum
- LeetCode - Binary Tree Maximum Path Sum
- [LeetCode]Binary Tree Maximum Path Sum
- [Leetcode]Binary Tree Maximum Path Sum
- Leetcode: Binary Tree Maximum Path Sum
- LeetCode-Binary Tree Maximum Path Sum
- [leetcode] Binary Tree Maximum Path Sum
- LeetCode - Binary Tree Maximum Path Sum
- LeetCode 124: Binary Tree Maximum Path Sum
- 【Leetcode】Binary Tree Maximum Path Sum
- LeetCode | Binary Tree Maximum Path Sum
- android 中向手机端安装apk 的时候报出 INSTALL_FAILED_INSUFFICIENT_STORAGE 错误的解决方法
- 浮点数陷阱
- 【36】在O(1)的时间删除链表结点
- Winphone开发之数据绑定(3)
- 判断二叉树是否是平衡二叉树
- leetcode:Binary Tree Maximum Path Sum
- cocos2d-x CCSrollView 源码,可循环的SrollView代码
- nil/Nil/NULL的区别
- Ubuntu下 Hadoop 1.2.1 配置安装
- asp.net SQL Server 存储过程分页及代码调用
- 黑马程序员_【总结】_集合框架知识梳理2
- The Swift Programming Language 中文版
- Linux系统各个目录的作用
- item1:使用静态工厂方法代替构造函数