House Robber III LeetCode solution in C++
1class Solution {2public:3vector<int> dp(TreeNode *root) {4vector<int> ans(2, 0); // dp[0]: maximal money you can get by robbing current node.5// dp[1]: maximal money you can get when not rob this node6if (root == NULL) return ans;7vector<int> left = dp(root->left);8vector<int> right = dp(root->right);9ans[0] = root->val + left[1] + right[1];10ans[1] = max(left[0], left[1]) + max(right[0], right[1]);11return ans;12}13int rob(TreeNode *root) {14vector<int> ans = dp(root);15return max(ans[0], ans[1]);16}17};