DailyChallenge
124. 二叉树中的最大路径和
Hard
20200621
Description
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
输出: 42
链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum
Solution
计算二叉树中的一个节点的最大贡献值,以该节点为根节点的子树中寻找以该节点为起点的一条路径,使得该路径上的节点值之和最大。
计算路径和即为左子树的贡献值+右子树的贡献值+节点值。遍历保存最大值。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int max;
public int maxPathSum(TreeNode root) {
max = Integer.MIN_VALUE;
dfs(root);
return max;
}
// 中序遍历
public int dfs(TreeNode node){
if(node == null)
return 0;
int left = Math.max(dfs(node.left), 0);
int right = Math.max(dfs(node.right), 0);
max = Math.max(max, left + right + node.val);
return node.val + Math.max(left, right);
}
}
我的公众号:GitKid
暂时每日分享LeetCode,我在不断学习的过程中,公众号也在不断充实,欢迎大家扫码关注。
TODO:《剑指offer》系列