LeetCode-124 Binary Tree Maximum Path Sum
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
题意: 求一个二叉树中任意联通两点路径和的最大值。
思路: 深度遍历该二叉树。
具有最大和的路径有三种情况:
1. 就在root.left子树中;2. 就在root.right子树中;3.包含root节点,一部分在root.left中,另一部分在root.right中。
我们记录两个数据,全局变量max表示全局的最大值,局部变量currentMax表示经过当前root节点的路径的最大值。如下图所示
在以-9为根的子树中,max=7, currentMax=(-9+7)=-2;
在以3为根节点的子树中,max=11,currentMax=(6+3)=9;
在以1为根节点的子树中,max=11, currentMax=(1+9)=10;
最后,我们想要的结果是max;
本题需要注意递归方法的返回值。代码如下:
1 public int maxPathSum(TreeNode root) { 2 if(root == null) 3 return 0; 4 maxPathSumHelper(root); 5 return this.max; 6 } 7 8 public int max = Integer.MIN_VALUE; 9 public int maxPathSumHelper(TreeNode root) { 10 if(root == null) 11 return 0; 12 int leftMax = 0; 13 int rightMax = 0; 14 15 int returnValue = root.val; 16 max = Math.max(root.val, max); 17 if(root.left != null) { 18 leftMax = maxPathSumHelper(root.left); 19 max = Math.max(max, Math.max(leftMax, leftMax+root.val)); 20 returnValue = Math.max(returnValue, leftMax+root.val); 21 } 22 if(root.right != null) { 23 rightMax = maxPathSumHelper(root.right); 24 max = Math.max(max, Math.max(rightMax, rightMax+root.val)); 25 returnValue = Math.max(returnValue, rightMax+root.val); 26 } 27 if(root.left != null && root.right != null) { 28 max = Math.max(max, root.val+leftMax+rightMax); 29 } 30 31 return returnValue; 32 }
posted on 2015-03-19 12:06 linxiong1991 阅读(150) 评论(0) 编辑 收藏 举报