1. 题目
2. 实现
2.1 思路
2.2 代码
// 当前节点选择不偷:当前节点能偷到的最大钱数 = 左孩子能偷到的钱 + 右孩子能偷到的钱
// 当前节点选择偷:当前节点能偷到的最大钱数 = 左孩子选择自己不偷时能得到的钱 + 右孩子选择不偷时能得到的钱 + 当前节点的钱数
var rob = function(root) {
let res = robInterval(root);
return Math.max(res[0], res[1]);
};
// 递归函数
function robInterval(root) {
if(root === null) {
return [0,0];
}
// res[0]表示当前节点不偷,res[1]表示当前节点偷
let res = [0,0];
// 左孩子、右孩子能偷到的钱
let left = robInterval(root.left);
let right = robInterval(root.right);
res[0] = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
res[1] = left[0] + right[0] + root.val;
return res;
}