Java实现:
1 class Solution { 2 Integer ans = Integer.MIN_VALUE; 3 public int maxPathSum(TreeNode root) { 4 oneSideMax(root); 5 return ans; 6 } 7 8 public int oneSideMax(TreeNode root){ 9 if(root == null){ 10 return 0; 11 } 12 int left = Math.max(0,oneSideMax(root.left));//判断左子树最大路径是否大于0 13 int right = Math.max(0,oneSideMax(root.right));//判断右子树最大路径是否大于0 14 ans = Math.max(ans,left + right + root.val);//后序遍历,是否更新全局最大路径值 15 return Math.max(left,right) + root.val;//因为这里是一条子路径,因此左右子树只能选一支 16 //如果左右子树都加到一起,那就不能和父节点组成一条路径了。 17 } 18 }
主要思想:二叉树后续遍历。