• LeetCode 337. House Robber III(dp)


    题意:每个节点都有一个值,不同时遍历父子节点的情况下,求整棵树遍历后的和的最大值。

    分析:每个节点都是选或不选,取最优

    (1)选:左右子节点不能选,孙子节点可以选也可以不选

    (2)不选:左右子节点可以选也可以不选

    /**
     * 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:
        map<TreeNode*, int> mp;
        int rob(TreeNode* root) {
            if(mp[root]) return mp[root];
            if(root == NULL) return 0;
            int not_choose_root = rob(root -> left) + rob(root -> right);
            int choose_root = root -> val;
            if(root -> left != NULL){
                choose_root += rob(root -> left -> left) + rob(root -> left -> right);
            }
            if(root -> right != NULL){
                choose_root += rob(root -> right -> left) + rob(root -> right -> right);
            }
            return mp[root] = max(not_choose_root, choose_root);
        }
    };
    

      

  • 相关阅读:
    从零开始~
    SVN
    了解下几个证书~~
    重要的技术发展趋势
    求职路上英语面试试题问答大全
    C语言比java重要吗?
    开源solr搜索服务器配置
    全文索引 与 Like 的实现原理
    nginx搭建多个站点
    .Solr构建索引查询索引
  • 原文地址:https://www.cnblogs.com/tyty-Somnuspoppy/p/12513158.html
Copyright © 2020-2023  润新知