Write a DFS function that returns a pair for each node. Pseudocode:
function dfs(v)
if v is null then
return (0, 0)
(left0, left1) := dfs(v.left)
(right0, right1) := dfs(v.right)
rob := v.val + left0 + right0
skip := max(left0, left1) + max(right0, right1)
return (skip, rob)
Return max of both states at root. Time , space where is tree height.