LeetCode(124) Binary Tree Maximum Path Sum解题报告

Given a binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.

For example:
Given the below binary tree,

       1
      / \
     2   3

Return 6.

解题思路:
遍历二叉树,以每一个节点为中心,来生成一个该节点的最大路径,因为需要大量重复计算,所以改进用val来存一些信息。
因为可过可不过根节点,所以遍历二叉树时需要做两件事:
1.生成以该节点m为根节点的一条最大路径,跟max比较,如果比max大 ,更新max
2.将左子树跟节点left和右子树根节点right的较大值找出来,如果比0大,则在该节点m的值上加上这个较大值(因为对于上层节点来说,下层节点的子树只能有一个作为路径的一部分,所以需要选一个较大值),递归即可。

public class Solution {
    int max;
    public int maxPathSum(TreeNode root) {
            max = Integer.MIN_VALUE;
            maxNode(root);
            return max;
      }
    public int maxNode(TreeNode root){
        int left,right,temp = 0;
        if(root == null)
            return 0;
        left = maxNode(root.left);
        right = maxNode(root.right);
        if(left > 0 && right > 0) temp = root.val+left+right;
        else if(left > 0) temp = root.val+left;
        else if(right > 0) temp = root.val+right;
        else temp = root.val;
        max = Math.max(max, temp);
        if((temp = Math.max(left, right)) > 0)
            root.val += temp;
        return root.val;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值