337. House Robber III
二刷吧。。不知道为什么house robbery系列我找不到笔记,不过印象中做了好几次了。
不是很难,用的post-order做bottom-up的运算。
对于一个Node来说,有2种情况,一种是选(自己+下下层);一种是选左右children.
其实就是选自己和不选自己的区别。其实更像是dfs的题而不是DP的题。
Time: O(n)
Space: O(lgn)
public class Solution {
public int rob(TreeNode root) {
if (root == null) return 0;
int leftLevel = 0;
int leftSubLevel = 0;
if (root.left != null) {
leftLevel = rob(root.left);
leftSubLevel = rob(root.left.left) + rob(root.left.right);
}
int rightLevel = 0;
int rightSubLevel = 0;
if (root.right != null) {
rightLevel = rob(root.right);
rightSubLevel = rob(root.right.left) + rob(root.right.right);
}
return Math.max((root.val + leftSubLevel + rightSubLevel), leftLevel + rightLevel);
}
}