Post-order pair
Time O(n) Space O(h)dfs returns {rob, skip}; rob = val + l.skip + r.skip; skip = max(l) + max(r).
class Solution {
public int rob(TreeNode root) {
int[] r = dfs(root);
return Math.max(r[0], r[1]);
}
private int[] dfs(TreeNode n) {
if (n == null) return new int[2];
int[] l = dfs(n.left), r = dfs(n.right);
int rob = n.val + l[1] + r[1];
int skip = Math.max(l[0], l[1]) + Math.max(r[0], r[1]);
return new int[]{rob, skip};
}
}Verdict: No memo map needed.