| 12
 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
 
 | 
 
 
 
 
 
 
 
 
 
 
 
 
 
 class Solution {
 
 int ans = Integer.MIN_VALUE;
 
 public int maxPathSum(TreeNode root) {
 dfs(root);
 return ans;
 }
 
 private int dfs(TreeNode root) {
 if (root == null) return 0;
 int left = dfs(root.left);
 int right = dfs(root.right);
 int sum = root.val;
 if (left >= 0) sum += left;
 if (right >= 0) sum += right;
 ans = Math.max(ans, sum);
 return Math.max(root.val, Math.max(left, right) + root.val);
 }
 }
 
 |