https://leetcode.com/problems/house-robber-iii/

1. Use recursion:

  1. //8 ms 18.4 MB
  2. /**
  3. * Definition for a binary tree node.
  4. * struct TreeNode {
  5. * int val;
  6. * TreeNode *left;
  7. * TreeNode *right;
  8. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  9. * };
  10. */
  11. class Solution {
  12. public:
  13. int rob(TreeNode* root) {
  14. int l = 0;
  15. int r = 0;
  16. return rob(root, l, r);
  17. }
  18. private:
  19. int rob(TreeNode* root, int& l, int& r){
  20. if(!root) return 0;
  21. int ll = 0;
  22. int lr = 0;
  23. int rl = 0;
  24. int rr = 0;
  25. l = rob(root->left, ll, lr);
  26. r = rob(root->right, rl, rr);
  27. return max(root->val + ll + lr + rl + rr, l + r);
  28. }
  29. };