DFS,给每个结点增加一个两元素的数组。res[0] 表示不加上当前结点值的最大值,res[1] 表示加上当前结点值的最大值。那么对于 res[0] 来说,其值等于子结点数组元素的较大值,因为此时可以加上子结点,也可以不加上子结点,选其中较大值。但是对于 res[1] 来说,就不行了,因为加上当前结点值的时候,必须不能加上子结点的值,否则警报会响,因此,只能算上子结点的 res[0]。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
vector<int> getMoney(TreeNode* node) {
vector<int> ret(2, 0);
if(!node) return ret;
vector<int> lRet = getMoney(node->left);
vector<int> rRet = getMoney(node->right);
ret[0] = lRet[1] + rRet[1] + node->val;
ret[1] = max(lRet[0], lRet[1]) + max(rRet[0], rRet[1]);
return ret;
}
public:
int rob(TreeNode* root) {
vector<int> ret = getMoney(root);
return max(ret[0], ret[1]);
}
};