二叉树中的最大路径和——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;
}
}