-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathNo124.binary-tree-maximum-path-sum.cs
77 lines (69 loc) · 1.82 KB
/
No124.binary-tree-maximum-path-sum.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
* Difficulty:
* Hard
*
* Desc:
* 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.
*
* Example 1:
* Input: [1,2,3]
* 1
* / \
* 2 3
* Output: 6
*
* Example 2:
* Input: [-10,9,20,null,null,15,7]
* -10
* / \
* 9 20
* / \
* 15 7
* Output: 42
*/
/**
* Definition for a binary tree node.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int MaxPathSum(TreeNode root) {
int res = int.MinValue;
int MathSum(TreeNode node) {
if (node == null) return int.MinValue;
int maxLeft = MathSum(node.left);
int maxRight = MathSum(node.right);
int maxSum = node.val;
try {
maxSum = Math.Max(
checked(maxLeft + node.val),
maxSum
);
} catch (System.OverflowException e) {}
try {
maxSum = Math.Max(
checked(maxRight + node.val),
maxSum
);
} catch (System.OverflowException e) {}
res = new int[]{
res,
maxSum,
maxLeft,
maxRight,
}.Max();
try {
res = Math.Max(res, checked(node.val + maxLeft + maxRight));
} catch (System.OverflowException e) {}
return maxSum;
}
MathSum(root);
return res;
}
}