Binary Tree Maximum Path Sum

来源:互联网 发布:手机淘宝微淘怎么置顶 编辑:程序博客网 时间:2024/04/29 13:04

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.


/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int maxPathSum(TreeNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int max = 1<<31;        map<TreeNode *, int> sum_map;        maxPath(root, sum_map, max);        return max;    }    int maxPath(TreeNode * root, map<TreeNode *, int> &sum_map, int & max){        if(!root) {            return 0;        }        if(!root->left && !root->right){            int sum = root->val;            if(sum > max) max = sum;            return root->val;        }        int left = maxSum(root->left, sum_map);        int right = maxSum(root->right, sum_map);        left = left > 0 ? left : 0;        right = right > 0 ? right : 0;        int sum = left + right + root->val;        if(sum > max) max = sum;        maxPath(root->left, sum_map, max);        maxPath(root->right, sum_map, max);        return max;    }    int maxSum(TreeNode* root, map<TreeNode *, int> &sum_map){        if(sum_map.find(root) != sum_map.end()){            return sum_map[root];        }        int value = 0;        if(!root) value = 0;        else if(!root->left && !root->right) value = root->val;        else {            value = max(maxSum(root->left, sum_map), maxSum(root->right, sum_map)) + root->val;        }        sum_map[root] = value > 0 ? value :0 ;        return sum_map[root];    }};


原创粉丝点击