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)

posted @ 2016-09-27 07:14  warmland  阅读(104)  评论(0编辑  收藏  举报