Skip to content

Latest commit

 

History

History
29 lines (25 loc) · 961 Bytes

P100. 打家劫舍 III.md

File metadata and controls

29 lines (25 loc) · 961 Bytes

algo38

# 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: Optional[TreeNode]) -> int:
        def dfs(node):
            #返回该节点不偷和偷状态下能够偷取的最大值
            if node is None:
                return [0,0]
            
            left = dfs(node.left)
            right = dfs(node.right)

            dp = [0, 0]
            #dp[0]表示以当前节点不偷状态下子树能够偷取的最大值,注意当前节点不偷的话,它的子树可以偷也可以不偷
            dp[0] = max(left) + max(right)
            #dp[1]表示当前节点偷状态下子树能够偷取的最大值
            dp[1] = node.val + left[0] + right[0]
            return dp

        res = dfs(root)
        return max(res)