题目:原题链接(中等)

标签:树、二叉树、深度优先搜索

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N) 64ms (66.67%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def rob(self, root: TreeNode) -> int:
        def recursor(node):
            # 处理当前节点不存在的情况
            if not node:
                return 0, 0

            # 左子树最大值(盗窃左节点和不盗窃左节点的两种情况)
            left1, left2 = recursor(node.left)

            # 右子树最大值(盗窃右节点和不盗窃右节点的两种情况)
            right1, right2 = recursor(node.right)

            # 盗窃当前节点并继续向根节点盗窃所能提供的最大值
            most_maybe1 = node.val + left2 + right2

            # 不盗窃当前节点并继续向根节点盗窃所能提供的最大值
            most_maybe2 = max(left1, left2) + max(right1, right2)  # 使用左子树和右子树的最大值,不盗窃当前节点

            return most_maybe1, most_maybe2

        return max(recursor(root))