Leetcode105:

来源:互联网 发布:梦幻诛仙手游数据互通 编辑:程序博客网 时间:2024/06/05 18:13

Given a binary tree, find the maximum path sum.

For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.

For example:
Given the below binary tree,

       1      / \     2   3

Return 6.

二叉树,找出任意一点到另一点的路径,使得和最大.

开始sb看错题了...

其实嘛...我们递归的来看...

如果只是一个节点,那么当然就是这个节点的值了.

如果这个作为root,那么最长路应该就是..

F(left) + F(right) + val...当然如果left,或者right<0就不用加了的= =

我们从下往上找...

如果这个不是root,那么就不能把left和right加起来了...因为只是一条路...

/** * 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 ans;    int scanT(TreeNode* root){        if(root == NULL) return 0;        int left = scanT(root -> left);        int right = scanT(root -> right);        int val = root -> val;        if(left > 0) val += left;        if(right > 0) val += right;        if(val > ans) ans = val;        return max(root->val ,max(left +  root -> val , right + root -> val));    }    int maxPathSum(TreeNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(root == NULL) return 0;        ans = root -> val;        scanT(root);        return ans;    }};



0 0
原创粉丝点击