[LeetCode 124]Binary Tree Maximum Path Sum

来源:互联网 发布:java createelement 编辑:程序博客网 时间:2024/05/16 11:45

题目链接:binary-tree-maximum-path-sum


/** *  * Given a binary tree, find the maximum path sum. *  * The path may start and end at any node in the tree. *  * For example: Given the below binary tree, *  *   1 *  / \ * 2   3  *  * Return 6. *  */public class BinaryTreeMaximumPathSum {public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}}//92 / 92 test cases passed.//Status: Accepted//Runtime: 338 ms//Submitted: 0 minutes ago//时间复杂度O(n),空间复杂度O(log n)public int max_sum = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {dfs(root);return max_sum;}public int dfs(TreeNode root) {int sum = root.val;int left_sum = 0;int right_sum = 0;if (root.left != null) {left_sum = dfs(root.left);if (left_sum > 0)sum += left_sum;}if (root.right != null) {right_sum = dfs(root.right);if (right_sum > 0)sum += right_sum;}// 比较(L-> root -> R)的值和max_sum的值max_sum = Math.max(sum, max_sum);//如果左右边的路径和的值都大于0,则只返回一个方向的值,即 L-> root 或 root -> R 路径if (left_sum > 0 && right_sum > 0) {return sum - ((left_sum < right_sum) ? left_sum : right_sum);}return sum;}    public static void main(String[] args) {// TODO Auto-generated method stub}}


0 0