LeetCode:337. House Robber III

在这里插入图片描述

这一题没有自己做出来。
答案是这样的:

class Solution {
public:
    int rob(TreeNode* root) {
        auto ret = helper(root);
        return max(ret.first, ret.second);
    }
private:
    pair<int, int> helper(TreeNode* node) {
        if (!node)
            return make_pair(0, 0);
        auto leftRes = helper(node->left);
        auto rightRes = helper(node->right);
        int v1 = node->val + leftRes.second + rightRes.second;
        int v2 = max(leftRes.first, leftRes.second) + max(rightRes.first, rightRes.second);
        return make_pair(v1, v2);
    }
};

v1是抢这个节点的最大收益
v2是不抢这个节点的最大收益

不能确保下次遇到这个问题一定能够想起来,因为不能说完全理解为什么要这样做,还是先记住吧。

posted @ 2019-09-15 20:30  于老师的父亲王老爷子  阅读(11)  评论(0)    收藏  举报