每个节点不是必选状态
不可选中相邻节点的最大路径和
描述:在不可选择相邻节点的情况下,如何找到最大路径和
难点:每个节点不是必可选
思路:对于每个节点都有两个选择状态,可选,不可选,因此我们可以用一个数组来维护,选择时为0,不选择时为1
1 当选择当前节点时,子节点不可选
2 当不选择当前节点时,max{选择子节点,不选择子节点}
class Solution {
public int rob(TreeNode root) {
int[] res = dfs(root);
return Math.max(res[0], res[1]);
}
private int[] dfs(TreeNode root){
if(root == null){
return new int[]{0,0};
}
int[] left = dfs(root.left);
int[] right = dfs(root.right);
//选择节点,不选择其左右子节点
int selected = root.val + left[1] + right[1];
//不选择该节点,可以选择其子节点,也可不选择,
int notSelected = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
return new int[]{selected, notSelected};
}
}