2019.7.22 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新)
虽然是一道hard题,但也只是一个简单的递归。本题递归的核心:路径和 = 根结点 + 左子树路径和 + 右子树路径和。
实际算法处理时候需要注意两点:1.空结点的路径和为Integer.MIN_VALUE,2.计算左右子树路径和时取0和递归项的较大值。
Given a non-empty binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root.
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例 1:
输入: [1,2,3]
1
/ \
2 3
输出: 6
示例 2:
输入: [-10,9,20,null,null,15,7]
-10
/ \
9 20
/ \
15 7
输出: 42
/**
*
* Given a non-empty binary tree, find the maximum path sum.
* For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections.
* The path must contain at least one node and does not need to go through the root.
* 给定一个非空二叉树,返回其最大路径和。
* 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
*
*/
public class BinaryTreeMaximumPathSum {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public int result;
public int maxPathSum(TreeNode root) {
result = Integer.MIN_VALUE;
SubTreeRouteSum(root);
return result;
}
public int SubTreeRouteSum(TreeNode root){
if(root == null)
return Integer.MIN_VALUE;
int leftsum = Math.max(0, SubTreeRouteSum(root.left));
int rightsum = Math.max(0, SubTreeRouteSum(root.right));
if(root.val + leftsum + rightsum > result)
result = root.val + leftsum + rightsum;
return root.val + Math.max(leftsum, rightsum);
}
}
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#