Problem : https://leetcode.com/problems/house-robber-iii/
Each level of the tree has 2 state : safe or not-safe.
If current level is safe to rob, thief can choose rob current level then next level is not safe to rob. Or skip current level, then next level is safe to rob.
Use memorization approach to find the answer.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def rob(self, root: TreeNode) -> int:
@lru_cache(maxsize = None)
def helper(node, safe):
result = 0
if node:
if safe:
result = node.val + helper(node.left, not safe) + helper(node.right, not safe)
result = max(result, helper(node.left, safe) + helper(node.right, safe))
else:
result = helper(node.left, not safe) + helper(node.right, not safe)
return result
return max(helper(root, True), helper(root, False))
No comments:
Post a Comment