Leetcode刷题之旅(每日一题)--124. 二叉树中的最大路径和

题目描述:
Leetcode刷题之旅(每日一题)--124. 二叉树中的最大路径和_第1张图片
思路:一开始题都没看明白什么意思,看了下评论区后发现,将整个树看成一个有权的图来看,每个节点的val就是权,求其中的最大路径和。这么来看就很清楚了,但是由于本质上还是二叉树,所以就不能用有权图的Kruskal算法。那么就只能用二叉树的递归来实现。
首先,这个最大路径和对于每个结点有三种情况,1.经过该节点向上一层走,2.经过该节点向其下一层结点走,3.不经过该结点。首先看第一种情况,向其上一结点走,那么对于当前节点的路径和就是其左孩子路径和右孩子路径中的最大值加上当前节点的val。第二种情况,经过该结点向其下方节点走,对于当前节点最大路径和就是左孩子路径+右孩子路径+自己的val。第三种情况,不经过该结点,路径和大于当前结点的路径和,那么就需要一个记录全局最大路径的变量。

class Solution {
    int max=Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
        maxPath(root);
        return max;
    }

    private int maxPath(TreeNode root){
        if (root==null)return 0;
        int leftPath=Math.max(maxPath(root.left),0);
        int rightPath=Math.max(maxPath(root.right),0);
        int curPath=leftPath+rightPath+root.val;

        max=Math.max(max,curPath);

        return root.val+Math.max(leftPath,rightPath);
        
    }
}

你可能感兴趣的:(Leetcode刷题之旅(每日一题)--124. 二叉树中的最大路径和)