zoukankan      html  css  js  c++  java
  • 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);
        }
    };
    
  • 相关阅读:
    对SpringIOC、AOP的理解
    Java后台与VUE跨域交接
    贼简单的Shiro框架之粗粒度控制菜单栏
    Json
    Spring MVC小DEMO
    面试问题
    多线程理解
    了解java语言
    单点登录如何设计
    进程的创建和调度分析
  • 原文地址:https://www.cnblogs.com/chwhc/p/13439075.html
Copyright © 2011-2022 走看看