[itint5]树中最大路径和

http://www.itint5.com/oj/#13

要注意,一是空路径也可以,所以最小是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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <climits>
using namespace std;
 
int maxPathHelper(TreeNode *root, int &max) {
    if (root == NULL) {
        return 0;
    }
    int root_val = root->val; // root it self
    int max1 = 0;
    int max2 = 0;
    for (int i = 0; i < root->children.size(); i++) {
        int max_sub = maxPathHelper(root->children[i], max);
        if (max_sub > max1) {
            max2 = max1;
            max1 = max_sub;
        } else if (max_sub > max2) {
            max2 = max_sub;
        }
    }
    int local_max = root_val;
    int tmp = root_val + max1;
    if (tmp > local_max) local_max = tmp;
    if (local_max > max) max = local_max;
    tmp = root_val + max1 + max2;
    if (tmp > max) max = tmp;
    return local_max;
}
 
/*
树结点的定义(请不要在代码中定义该类型)
struct TreeNode {
    int val;
    vector<TreeNode*> children;  //该结点的儿子结点
 };
*/
int maxTreePathSum(TreeNode *root) {
    int max = 0;
    maxPathHelper(root, max);
    return max;
}

  

[itint5]树中最大路径和

上一篇:centos memcached


下一篇:flash sin 弧线运动轨迹