diff --git a/problems/0337.打家劫舍III.md b/problems/0337.打家劫舍III.md index dfb8ba57..541c1163 100644 --- a/problems/0337.打家劫舍III.md +++ b/problems/0337.打家劫舍III.md @@ -395,6 +395,35 @@ const rob = root => { }; ``` +Go: +```go +// 打家劫舍Ⅲ 动态规划 +// 时间复杂度O(n) 空间复杂度O(logn) +func rob(root *TreeNode) int { + dp := traversal(root) + return max(dp[0], dp[1]) +} + +func traversal(cur *TreeNode) []int { + if cur == nil { + return []int{0, 0} + } + + dpL := traversal(cur.Left) + dpR := traversal(cur.Right) + + val1 := cur.Val + dpL[0] + dpR[0] // 偷盗当前节点 + val2 := max(dpL[0], dpL[1]) + max(dpR[0], dpR[1]) // 不偷盗当前节点 + return []int{val2, val1} +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} +```