leet-code/src/main/java/leetcode/editor/cn/BinaryTreeMaximumPathSum.java

84 lines
2.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不
//一定经过根节点。
//
// 路径和 是路径中各节点值的总和。
//
// 给你一个二叉树的根节点 root ,返回其 最大路径和 。
//
//
//
// 示例 1
//
//
//输入root = [1,2,3]
//输出6
//解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6
//
// 示例 2
//
//
//输入root = [-10,9,20,null,null,15,7]
//输出42
//解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42
//
//
//
//
// 提示:
//
//
// 树中节点数目范围是 [1, 3 * 104]
// -1000 <= Node.val <= 1000
//
// Related Topics 树 深度优先搜索 递归
// 👍 1057 👎 0
package leetcode.editor.cn;
import com.code.leet.entiy.TreeNode;
//124:二叉树中的最大路径和
public class BinaryTreeMaximumPathSum {
public static void main(String[] args) {
//测试代码
Solution solution = new BinaryTreeMaximumPathSum().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
dfs(root);
return max;
}
public int dfs(TreeNode root) {
if (root == null) {
return 0;
}
int left = Math.max(0, dfs(root.left));
int right = Math.max(0, dfs(root.right));
max = Math.max(left + right + root.val, max);
return Math.max(left, right) + root.val;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}