124. Binary Tree Maximum Path Sum
感觉和53.maximum subarray有相似处,维护一个localMax,一个globalMax
localMax是指左右只选一条的max,简单表示是Math.max(left, right) + nums[i].其实left和right的值因为可能是负数,所以left/right的值是0或者选
globalMax是指以当前节点为中心节点两侧总和最大,简单说是Math.max(local, global);
最后返回左右中比较大的一条供上一级节点来选择。
1 int global = Integer.MIN_VALUE; 2 3 public int maxPathSum(TreeNode root) { 4 helper(root); 5 return global; 6 } 7 8 private int helper(TreeNode root) { 9 if(root == null) { 10 return 0; 11 } 12 int left = Math.max(0, helper(root.left)); 13 int right = Math.max(0, helper(root.right)); 14 global = Math.max(global, left + right + root.val); 15 return Math.max(left, right) + root.val; 16 }
是dfs, time complexity应该是O(n)