树状DP
树状 DP,即在树上进行的 DP。由于树固有的递归性质,树状DP 一般都是递归进行的。
树状DP往往结合DFS ,树的后序遍历,从叶子节点开始考虑
337. 打家劫舍 III
对于这个题 对于每个父节点,若选择该节点,那么其子节点不可选;若不选择该节点,就可以选择其子节点维护的最大值之和。 下面chose变量并不是一定选择该节点 ,只是表示在 选择该节点和不选中 取更优的。
所以每次递归返回两个值,代表当前节点最优和不选的情况。
class Solution:
def rob(self, root: TreeNode) -> int:
def dfs(node):
if not node:
return 0