二叉树中的最大路径和——leetcode124

 二叉树中的最大路径和

题目:二叉树中的最大路径和

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

路径和是任意两点之间路径中各节点值的总和。

示例:

输入:root = [-10,9,20,null,null,15,7]
输出:42
解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42

题解:递归

以20这个节点为例:

1. 如果当前节点想继续向上访问父节点:则从左右子树中选择最大的作为路径

当前节点的最大路径:root.val+max(left, right)

2.如果当前节点不向上访问父节点:则相加左右子树作为路径

当前节点路径最大值:root.val+left+right

class Solution {
    private int maxSum;
    public int dfs(TreeNode root) {
        if(root==null) return 0;
        int left=dfs(root.left);
        int right=dfs(root.right);
        int one=root.val+Math.max(0, left)+Math.max(0, right);
        int two=root.val+Math.max(0, Math.max(left, right));
        maxSum=Math.max(maxSum, Math.max(one, two));
        return two;
    }
    public int maxPathSum(TreeNode root) {
        maxSum=Integer.MIN_VALUE;
        dfs(root);
        return maxSum;
    }
}
posted @ 2022-01-12 12:09  言思宁  阅读(39)  评论(0编辑  收藏  举报