【leetcode】binary-tree-maximum-path-sum

来源:互联网 发布:淘宝怎么收藏宝贝截图? 编辑:程序博客网 时间:2024/05/21 09:18

后序遍历;注意两个值,1.以该节点为最高节点的路径上所有节点的和;2.通过该节点(或者一直向下)孩子路径的最大值;

前者不需要保存,只是为了求解,每次跟最大值比较保留较大值即可,后者为了便于计算上层节点的为最高父节点的和,需要暂时保存;

开始时想错了,浪费了很长时间;后来想要保存上述两个值,但需要修改TreeNode,看过discussion上别人的代码,才写出来;

代码如下:

//2014年8月21日15:16:05//2014年8月21日16:44:48#include <iostream>using namespace std;struct TreeNode {     int val;     TreeNode *left;     TreeNode *right;     TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public:    int maxValue = 0;    int maxPathSum(TreeNode *root) {        maxValue = root->val;        GetMaxChildValue(root);        return maxValue;    }    int GetMaxChildValue(TreeNode *root)    {        int ret = 0;        int leftChildValue = 0,rightChildValue = 0;        if(root->left != NULL){            leftChildValue = GetMaxChildValue(root->left);        }        if(root->right != NULL){            rightChildValue = GetMaxChildValue(root->right);        }        int maxValue1 = max(maxValue,leftChildValue+rightChildValue+root->val);        int maxValue2 = max(leftChildValue+root->val,rightChildValue+root->val);        maxValue = max(maxValue1,maxValue2);        ret = max(max(root->val,root->val+leftChildValue),root->val+rightChildValue);        return ret;    }};int main(){    struct TreeNode A(1);    struct TreeNode B(-2);    struct TreeNode C(3);    A.left = &B;    A.right = &C;    Solution S;    cout << S.maxPathSum(&A) << endl;    return 0;}


0 0
原创粉丝点击