Description
Solutions
Conclusion
class Solution {
public:
struct T {
int sum, lo, hi;
T(int sum_, int lo_, int hi_):sum(sum_), lo(lo_), hi(hi_){}
};
int ans;
T solve(TreeNode *rt) {
T tl(0, rt->val, INT_MIN);
T tr(0, INT_MAX, rt->val);
// 后序遍历
if (rt->left) tl = solve(rt->left);
if (rt->right) tr = solve(rt->right);
if (tl.hi < rt->val && rt->val < tr.lo) {
ans = max(ans, tl.sum + rt->val + tr.sum);
return T(tl.sum + rt->val + tr.sum, tl.lo, tr.hi);
}
return T(INT_MIN, INT_MIN, INT_MAX);
}
int maxSumBST(TreeNode* root) {
ans = 0;
solve(root);
return ans;
}
};