LeetCode 337. House Robber III 打家劫舍
第一次用结构体代替dp数组,这个题没有标明树的深度,用数组存二叉树会爆内存。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
struct dp{
int v0,v1;
dp *lf;
dp *rt;
dp() : v0(0),v1(0),lf(NULL),rt(NULL){}
};
class Solution {
public:
void dfs(TreeNode *p,dp *u){
if(!p){
return;
}
if(!p->left&&!p->right){
u->v0=0;
u->v1=p->val;
return ;
}
u->lf=new dp(),u->rt=new dp();
if(p->left){
dfs(p->left,u->lf);
}
if(p->right){
dfs(p->right,u->rt);
}
/*
dp[1][u]=dp[0][L(u)]+dp[0][R(u)]+p->val;
dp[0][u]=max(dp[0][L(u)],dp[1][L(u)])+max(dp[0][R(u)],dp[1][R(u)]);
*/
u->v1=p->val+u->lf->v0+u->rt->v0;
u->v0=max(u->lf->v0,u->lf->v1)+max(u->rt->v0,u->rt->v1);
}
int rob(TreeNode* root) {
dp *ans=new dp();
dfs(root,ans);
return max(ans->v0,ans->v1);
}
};