【LeetCode】Binary Tree Maximum Path Sum

public class Solution {
private static int ans = Integer.MIN_VALUE;

	/**
	 * 以这棵树为例:
                      2
                   /     \
                1(黄)      -1
              /  \     /     \
            1     -3  1       7
 图中红色路径表示的一条最大路径:
先看下递归过程:
以左下角的1为root的树的最大路径肯定是1,而异-3为root的树的最大路径是-3,以他俩的父节点1为根节点的最大路径有这么几种情况:
root.val,  root.val + left , root.val + right ,root.val + left + right
取其中的最大值(图中的例子是root.val + left:2),更新max(上面取四个值得最大值,仅用于更新max)
 
但是这个递归函数的返回不应该包括root.val + left + right,因为黄底色的1作为2的左子树的返回值只能由其他节点经过黄底色的1,传到根节点2,单向,传到2,不能形成折路
	 *
	 */
	public int getMax(TreeNode root) {// 获取每个节点左右单颗树的最大值,同时更新结果最大值
		if (root == null)
			return 0;
		else {
			int leftValue = getMax(root.left);
			int rightValue = getMax(root.right);
			ans = Math.max(
					ans,
					Math.max(
							Math.max(
									Math.max(leftValue + root.val, rightValue
											+ root.val), root.val), leftValue
									+ rightValue + root.val));
			return Math.max(
					Math.max(leftValue + root.val, rightValue + root.val),
					root.val);
		}
	}
	public  int maxPathSum(TreeNode root) {
		if (root == null)
			return 0;
		getMax(root);
		return ans;
	}
	}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值