The thief has found himself a new place for his thievery again. There is only one entrance to this >area, called the “root.” Besides the root, each house has one and only one parent house. After a >tour, the smart thief realized that “all houses in this place forms a binary tree”. It will >automatically contact the police if two directly-linked houses were broken into on the same night.
Determine the maximum amount of money the thief can rob tonight without alerting the police.
![]()
思路:递归,从上到下要么偷要么不偷。缺点:效率不高,容易超时
DP:加个hashmap,防止相同节点重复计算
/**
* 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 {
//思路:
public:
int rob(TreeNode* root) {
if(root == NULL)
{
return 0;
}
//偷
int stolenRootSum = root->val;
if(root->left)
{
stolenRootSum+= rob(root->left->left) + rob(root->left->right);
}
if(root->right)
{
stolenRootSum+= rob(root->right->left) + rob(root->right->right);
}
return max(stolenRootSum,rob(root->left)+rob(root->right));
}
};