Code

  1. class Solution {
  2. public int rob(TreeNode root) {
  3. int[] rootStatus = dfs(root);
  4. return Math.max(rootStatus[0], rootStatus[1]);
  5. }
  6. public int[] dfs(TreeNode node) {
  7. if (node == null) {
  8. return new int[]{0, 0};
  9. }
  10. int[] l = dfs(node.left);
  11. int[] r = dfs(node.right);
  12. int selected = node.val + l[1] + r[1];
  13. int notSelected = Math.max(l[0], l[1]) + Math.max(r[0], r[1]);
  14. return new int[]{selected, notSelected};
  15. }
  16. }