Binary Tree Maximum Path Sum

来源:互联网 发布:js参数给jquery赋值 编辑:程序博客网 时间:2024/05/18 03:36

递归求解,时间复杂度O(n),空间复杂度O(logN),参考Leetcode题解。注意递归返回的时候只能返回单侧路径的和或者根节点的值。

class Solution {public:    int max_sum;    int maxPathSum(TreeNode *root) {        max_sum = INT_MIN;        dfs(root);        return max_sum;    }        int dfs(TreeNode *root)    {        if(!root) return 0;        int left = dfs(root->left);        int right= dfs(root->right);                int sum = root->val;        if(left > 0) sum += left;        if(right> 0) sum += right;        max_sum = std::max(max_sum, sum);        if(max(left, right)>0)            return max(root->val+left, root->val+right);        else            return root->val;    }};


使用stack进行后序遍历,迭代求解: 参考http://blog.csdn.net/starmsg/article/details/39030379

class Solution {public:    int maxPathSum(TreeNode *root) {        int max_sum = INT_MIN;        if(root == NULL) return 0;        unordered_map<TreeNode*, int> map;        vector<TreeNode*> stack;                TreeNode *cur = root;        TreeNode *prev = NULL;                int sum = 0;        while(!stack.empty() || cur != NULL)        {            if(cur != NULL)            {                stack.push_back(cur);                cur = cur->left;            }else            {                cur = stack.back();                if(cur->right == NULL || cur->right == prev)                {                    int left_val = (cur->left)?map[cur->left]:0;                    int right_val = (cur->right)?map[cur->right]:0;                    int max_val = max(left_val, right_val);                    map[cur] = max_val>0?(max_val+cur->val):cur->val;                                        sum = cur->val;                    sum += (left_val>0)?left_val:0;                    sum += (right_val>0)?right_val:0;                    max_sum = std::max(max_sum, sum);                                        stack.pop_back();                    prev = cur;                    cur = NULL;                }                else                    cur = cur->right;            }        }        return max_sum;    }};



0 0
原创粉丝点击