# coding: utf-8 class Solution: """ @param root: The root of binary tree. @return: An integer """ def maxPathSum(self, root): # write your code here if not root: return 0 self.ret = -2147483648 self._maxPathSum(root) return self.ret def _maxPathSum(self, root): if not root: return 0 left_sum = self._maxPathSum(root.left) right_sum = self._maxPathSum(root.right) ''' ä»ä»¥ä¸å¼ä¸æ¯è¾è·åæå¤§å¼ä¸self.retæ¯è¾å¹¶æ´æ° - root.val - root.val + max_left_sum - root.val + max_right_sum - root.val + max_left_sum + max_right_sum è¿ä¸ªå¼æ¯å½åå å«è¯¥èç¹çæå¤§è·¯å¾å ''' sub_max = max(root.val + left_sum, root.val + right_sum) sub_max = max(sub_max, root.val) sub_max = max(sub_max, root.val + left_sum + right_sum) if sub_max > self.ret: self.ret = sub_max ''' è¿åå¼åºå½æ¯ä»¥ä¸å¼ä¸æ¯è¾è·åæå¤§ï¼å 为路å¾è¦åä¸å»¶ä¼¸ï¼ - root.val - root.val + max_left_sum - root.val + max_right_sum ''' return max(max(root.val + left_sum, root.val + right_sum), root.val) # medium: http://lintcode.com/zh-cn/problem/binary-tree-maximum-path-sum/