您的位置:首页 > 其它

Binary Tree Maximum Path Sum [leetcode] dp

2015-07-04 11:48 337 查看
a(i):在节点i由于单边路径的最大结束

b(i):在节点i路径和

a(i) = max{ i->val,
i->val + max{a(i->left), a(i->right) }};

b(i) = max{ i->val, i->val + max{a(i->left), a(i->right) } ,
i->val + a(i->left) + a(i->right)};

因为a(i), b(i)只和a(i->left)和a(i->right) 有关。因此能够将空间压缩为O(1)

代码例如以下:

int maxPathSum(TreeNode *root) {
int res = INT_MIN;
getSum(root, res);
return res;
}

int getSum(TreeNode * root, int & res)
{
if (root == NULL) return 0;
int l = getSum(root->left, res);
int r = getSum(root->right, res);
int a, b;
a = max(root->val, root->val + max(l, r));//one side
b = max(a, root->val + l + r);            //both side
res = max(res, max(a, b));
return a;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: