您的位置:首页 > 其它

LeetCode Binary Tree Maximum Path Sum 二叉树最大路径和(DFS)

2015-07-29 09:47 411 查看
题意:给一棵二叉树,要求找出任意两个节点(也可以只是一个点)的最大路径和,至少1个节点,返回路径和。(点权有负的。)

思路:DFS解决,返回值是,经过从某后代节点上来到当前节点且路径和最大的值。要注意如果子树传来的如果是负值,是可以同时丢弃的,但至少要将当前节点的val更新答案。

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxPathSum(TreeNode* root) {
ans=-2147483648;
DFS(root);
return ans;
}
private:
int ans;
int DFS(TreeNode* t) {
if(!t)  return 0;
int a=max(0,DFS(t->left));  //小于0的直接丢弃
int b=max(0,DFS(t->right));
ans=max(ans, a+b+t->val);   //更新,必须以当前节点为中转
return max(a, b)+t->val;    //只能返回一条到叶子的路径
}
};


AC代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: