| 1234567891011121314151617181920212223242526272829303132333435363738394041 | /** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */type node struct {	root *TreeNode	done bool}func rob(root *TreeNode) int {	m := make(map[node]int)	return maxInt(helper(root, false, &m), helper(root, true, &m))}func helper(root *TreeNode, done bool, m *map[node]int) int {	if root == nil {		return 0	}	if max, ok := (*m)[node{root, done}]; ok { // Memory search		return max	}	var max int	if done {		max = helper(root.Left, false, m) + helper(root.Right, false, m)	} else {		max = maxInt(root.Val+helper(root.Left, true, m)+helper(root.Right, true, m), helper(root.Left, false, m)+helper(root.Right, false, m))	}	(*m)[node{root, done}] = max	return max}func maxInt(x, y int) int {	if x < y {		return y	}	return x}
 |