Leetcode 337. 打家劫舍 III

Posted randyniu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 337. 打家劫舍 III相关的知识,希望对你有一定的参考价值。

/**
 * 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:
    struct returnData
    {
        int qu;
        int buqu;
        returnData(int _qu, int _buqu): qu(_qu), buqu(_buqu){}
    };
    
    returnData process(TreeNode* root)
    {
        if(root==nullptr)
        {
            return returnData(0,0);
        }
        
        returnData left = process(root->left);
        
        returnData right = process(root->right);
        
        //父节点取的情况下
        int qu = left.buqu + right.buqu + root->val;
        //父节点不取的情况下
        int a = left.qu+right.qu;
        int b = left.qu+right.buqu;
        int c = left.buqu+right.qu;
        int d = left.buqu+right.buqu;
            
        int buqu = max(max(max(a,b),c),d);
        
        return returnData(qu, buqu);
    }
    
    int rob(TreeNode* root) {
        if(root==nullptr)
            return 0;
        returnData ret = process(root);
        return max(ret.qu, ret.buqu);
    }
};

 

以上是关于Leetcode 337. 打家劫舍 III的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode] 337. 打家劫舍III ☆☆☆(动态规划)

252.LeetCode | 337. 打家劫舍 III

LeetCode 337. 打家劫舍 III

leetcode337——打家劫舍III

Leetcode题目337:打家劫舍 III(中等)

[LeetCode] 337. 打家劫舍 III (树形dp)