- dp数组的含义
下标为0记录不偷该节点所得到的的最大金钱,下标为1记录偷该节点所得到的的最大金钱。
后序遍历递归时每次返回的是dp数组
- 递归的终止条件
空节点直接返回空dp数组(默认初始化为0,0)
- 遍历顺序
后序遍历,因为需要根据递归返回值进行后续计算
通过递归左节点,得到左节点偷与不偷的金钱。
通过递归右节点,得到右节点偷与不偷的金钱。
- 单层递归逻辑
```cpp
vector
left = robTree(cur->left); // 左 vector right = robTree(cur->right); // 右
// 偷cur int val1 = cur->val + left[0] + right[0]; // 不偷cur int val2 = max(left[0], left[1]) + max(right[0], right[1]); return {val2, val1}; ```