Fork me on github

124 二叉树中的最大路径和

/*
递归
*/
class Solution {
    //记录整棵树的最大路径和
    int maxSum = Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
        maxGain(root);
        return maxSum;
    }
    /*
    计算该结点的最大贡献值
    */
    public int maxGain(TreeNode node){
        if(node == null){
            return 0;
        }
        //分别计算左右子树的最大贡献值,只要比0大的值
        int leftSum = Math.max(maxGain(node.left), 0);
        int rightSum = Math.max(maxGain(node.right), 0);
        int curSum = node.val + leftSum + rightSum;
        //更新结果
        maxSum = Math.max(maxSum, curSum);
        return node.val + Math.max(leftSum, rightSum);
    }
}

做树的题目,要学会使用递归(只考虑当前这一层,算好出口即可)

posted @ 2020-08-20 16:32  zjy4fun  阅读(98)  评论(0编辑  收藏  举报