题目

我们想起来刚才我们写的打家劫舍的题目,和这道题的思想差不多,只不过一个是数组一个是二叉树。我们很快就能写出来下面的代码。和打家劫舍的思路一样。

var rob = function(root) {
  function dfs(root){
    if(!root)return [0,0];
    const l = dfs(root.left);
    const r = dfs(root.right);
    const selected = root.val + l[1] + r[1];
    const noSelected = Math.max(l[0],l[1]) + Math.max(r[0],r[1]);
    return [selected,noSelected];
  }
  const result = dfs(root);
  return Math.max(result[0],result[1]);
};