首页 > 其他 > 详细

LeetCode Binary Tree Maximum Path Sum

时间:2014-03-23 10:00:59      阅读:375      评论:0      收藏:0      [点我收藏+]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
    int maxPathSum(TreeNode *root) {
        int s, m;
        dfs(root, s, m);
        return (m > s) ? m : s;
    }
     
    void dfs(TreeNode* root, int& sole, int& misc) {
        if (root == NULL) {
            sole = INT_MIN;
            misc = INT_MIN;
            return;
        }
        int ls, lm, rs, rm, ms, mm;
        dfs(root->left, ls, lm);
        dfs(root->right, rs, rm);
         
        ms = (ls > rs) ? ls : rs;
        mm = (lm > rm) ? lm : rm;
         
        sole = root->val + (ms < 0 ? 0 : ms);
        int m = ((ls < 0 ? 0 : ls) + (rs < 0 ? 0 : rs) + root->val);
        misc = mm > m ? mm : m;
    }
};

dfs深度优先遍历计算路径和,它分别计算经过该节点,且另一个端点在左或右子树中的最大路径和(得到的这两个路径是不会跨越该节点的,用sole表示),那么对于那些端点不包括当前节点,分布在左/右子树中的(该种类的)最大路径和用misc表示。则以当前节点为根的子树的最大路径和,可能是其某个子树中的misc类路径,也可能是左sole+右sole+当前节形成的路径,通过比较他们两者的值我们可以得到该子树的最大路径和。同样的对于整棵树也是如此。

可以看到misc变量只负责存储dfs搜索过程中的最大路径和,因此也可以把包含左右子树中路径的最大路径和存到一个全局/类变量中,并初始化为最小值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
private:
    int max_path;
public:
    int maxPathSum(TreeNode *root) {
        max_path = INT_MIN;
        dfs(root);
        return max_path;
    }
 
    int dfs(TreeNode* root) {
        if (root == NULL) return 0;
        int ls = dfs(root->left);
        int rs = dfs(root->right);
         
        int ms = (ls > rs) ? ls : rs;
         
        int sole = root->val + (ms < 0 ? 0 : ms);
         
        int m = ((ls < 0 ? 0 : ls) + (rs < 0 ? 0 : rs) + root->val);
         
        if (m > max_path) max_path = m;
         
        return sole;
    }
 
};

 

参考:

zhuli题解 http://www.cnblogs.com/zhuli19901106/p/3547387.html

LeetCode Binary Tree Maximum Path Sum,布布扣,bubuko.com

LeetCode Binary Tree Maximum Path Sum

原文:http://www.cnblogs.com/lailailai/p/3617048.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!