【树上DP】还是选或者不选的问题,但是这个需要在DFS的过程中去处理,所以需要用一个数组来返回当前节点选和没选的最大值。
class Solution {
public int[] dfs(TreeNode node) {
if (node == null) return new int[] {0, 0};
int v = node.val;
int[] left = dfs(node.left);
int[] right = dfs(node.right);
int not = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
return new int[] {not, v + left[0] + right[0]};
}
public int rob(TreeNode root) {
int[] ans = dfs(root);
return Math.max(ans[0], ans[1]);
}
}