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
- }
|