124. Binary Tree Maximum Path Sum

题意:给定一个二叉树,每个节点有一个权值,寻找任意一个路径,使得权值和最大,只需返回权值和。

思路:对于每一个节点 首先考虑以这个节点为结尾(包含它或者不包含)的最大值,有两种情况,分别来自左儿子和右儿子设为Vnow。

然后考虑经过这个节点的情况来更新最终答案。更新答案后返回Vnow供父节点继续更新。

代码很简单.

有一个类似的很有趣的题目,给定一个二叉树,选择一条路径,使得权值最大的和最小的相差最大。参考POJ3728

class Solution {
public:
    int ans;
	Solution(){ans=-2147483647;}
    int maxPathSum(TreeNode* root) {
       solve(root);
       return ans;
    }
    int solve(TreeNode* root) {
       if(root->left==NULL&&root->right==NULL)
       	{ans=max(ans,root->val);return root->val;}
	   int vnow=root->val;ans=max(ans,vnow);
	   int lv=0,rv=0;
	   if(root->left!=NULL)
	   		{
	   		 lv=solve(root->left);
	   		 vnow=max(vnow,root->val+lv);
	   		 ans=max(ans,vnow);
			}
	   if(root->right!=NULL)
	   		{
	   		 rv=solve(root->right);
	   		 vnow=max(vnow,root->val+rv);
	   		 ans=max(ans,vnow);
			}
	    ans=max(ans,lv+rv+root->val);
	    return vnow;
    }
};

  

posted on 2017-03-14 22:08  Bingsen  阅读(135)  评论(0编辑  收藏  举报