题解 | 二叉树中的最大路径和

二叉树中的最大路径和

https://www.nowcoder.com/practice/da785ea0f64b442488c125b441a4ba4a

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * dfs:
     * 最关键的就是用currentPath计算当前节点的val+left+right是多少
     * 通过return把子结点的path传给了父结点
     */

    int maxSum = Integer.MIN_VALUE;
    public int maxPathSum (TreeNode root) {
        dfs(root);
        return maxSum;
    }

    public int dfs(TreeNode root) {
        if (root == null) return 0;

        //负数就不要
        int left = Math.max(0, dfs(root.left));
        int right = Math.max(0, dfs(root.right));

        //计算以当前节点为拐点的最大路径值(左+中+右)
        //用它去尝试更新全局最高纪录
        int currentPath = root.val + left + right;
        maxSum = Math.max(maxSum, currentPath);

        //把当前节点的最大路径值返回给父结点,注意此时只能返回左或右边的其中一条路
        return root.val + Math.max(left, right);
    }
}

全部评论

相关推荐

05-16 21:54
已编辑
门头沟学院 前端工程师
蓝曦111:我也是25届,这是第二次被裁了,毕业没到一年就失业两次,两次都是公司问题。第一家才转正一个月,跟我说公司拿不到项目结款没办法,赔了一个月;第二个公司连工资都发不出来了,赔偿更别想了,我算是认命了,这条路也不知道能走多远走多久,不过生活还是要继续的,走一步看一步吧
当你面对裁员会如何?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务