题意大概为在不允许抢劫二叉树中有直接联系的两个节点的前提下获得最大收益,对于每一个节点可以用一个数组res【0】来表示抢,res【1】表示不抢,若当前节点被抢,则左右子节点必然不会被抢,而若当前节点不抢,则左右子节点是否抢则取决于怎样的收益最大。代码如下:
/** * 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: vector<int> ans(TreeNode* root) { vector<int> res; res.push_back(0); res.push_back(0); if(root==NULL) return res; vector<int> left=ans(root->left); vector<int> right=ans(root->right); res[0]=left[1]+right[1]+root->val; res[1]=max(left[0],left[1])+max(right[0],right[1]); return res; } int rob(TreeNode* root) { vector<int> t=ans(root); int an=max(t[0],t[1]); return an; } };