问题:给出一个树,只能隔一层取值,求最大值。
思路:方法一用dp(node)从当前结点开始可以取的最大值。当取node的值时,dp(node)=node.val + dp(node.left.left)+dp(node.left.right)+dp(node.right.left)+dp(node.right.right)。当不取noder 值时,dp(node)=dp(node.left)+dp(node.right),两者取最大值。
方法二使用dp(node,0)表示不取node时的最大值,dp(node,1)表示取node时的最大值。
则有dp(node,0)=max(dp(node.left,0), dp(node.left,1)) + max(dp(node.right,0), dp(node.right,1))
dp(node,1)=node.val+ dp(node.left,0) + dp(node.right,0)
具体代码参考:
https://github.com/wuli2496/OJ/tree/master/LeetCode/House%20Robber%20III