(M)DFS: 337. House Robber III

来源:互联网 发布:美国人的零食知乎 编辑:程序博客网 时间:2024/06/08 05:02

DFS,给每个结点增加一个两元素的数组。res[0] 表示不加上当前结点值的最大值,res[1] 表示加上当前结点值的最大值。那么对于 res[0] 来说,其值等于子结点数组元素的较大值,因为此时可以加上子结点,也可以不加上子结点,选其中较大值。但是对于 res[1] 来说,就不行了,因为加上当前结点值的时候,必须不能加上子结点的值,否则警报会响,因此,只能算上子结点的 res[0]。

/** * 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 {      vector<int> getMoney(TreeNode* node) {          vector<int> ret(2, 0);          if(!node) return ret;          vector<int> lRet = getMoney(node->left);          vector<int> rRet = getMoney(node->right);          ret[0] = lRet[1] + rRet[1] + node->val;          ret[1] = max(lRet[0], lRet[1]) + max(rRet[0], rRet[1]);          return ret;      }  public:      int rob(TreeNode* root) {          vector<int> ret = getMoney(root);          return max(ret[0], ret[1]);      }  };


原创粉丝点击