【树】124. 二叉树中的最大路径和

题目:

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

 

示例 1:

输入:[1,2,3]

1
/ \
2 3

输出:6

 

解答:

方法一:递归

 

 

 

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int res = Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
        maxContribution(root);

        return res;
    }

    //计算每个结点的贡献值,顺带计算结果res
    //自底向上,采用后序遍历
    public int maxContribution(TreeNode root){
        //如果节点为空,则贡献值为0
        if(root == null) return 0;
        
        //左右子节点的贡献值大于0时才是有效贡献值,否则贡献值记为0
        int left = Math.max(maxContribution(root.left),0);
        int right = Math.max(maxContribution(root.right),0);

        //更新最大路径和
        res = Math.max(res,root.val + left + right);
        
        //返回当前节点的贡献值,只能是左上(根节点+左子节点)或者右上(根节点+右子节点)的情况选其一
        return root.val + Math.max(left,right);
        
    }
}

 

posted @ 2020-09-20 09:17  3KBLACK  阅读(114)  评论(0)    收藏  举报