解题思路在于helper函数的定义,代表了考虑当前房屋(root)之后所能带来的收益,返回值包括了抢(do)与不抢(not do)当前房屋的数值(数组的0和1)
如果决定抢当前房屋则不考虑左右节点,如果不抢则分别考虑左右节点中抢与不抢结果大的值,然后相加
class Solution:
def rob(self, root: TreeNode) -> int:
#递归暴力
#考虑root节点带来的最大收益
def helper(root):
#arr[do, not_do]
if not root: return [0, 0]
res = [0,0]
left = helper(root.left)
right = helper(root.right)
#root偷则孩子不偷
do = root.val + left[1] + right[1]
not_do = max(left[0], left[1]) + max(right[0], right[1])
res[0] = do
res[1] = not_do
return res
res = helper(root)
return max(res[0], res[1])