老卫带你学---leetcode刷题(337. 打家劫舍 III)

337. 打家劫舍 III

问题:

小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。

除了 root 之外,每栋房子有且只有一个"父"房子与之相连。一番侦察之后,聪明的小偷意识到"这个地方的所有房屋的排列类似于一棵二叉树"。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。

给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。

bash 复制代码
示例 1:



输入: root = [3,2,3,null,3,null,1]
输出: 7 
解释: 小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7
bash 复制代码
示例 2:



输入: root = [3,4,5,1,3,null,1]
输出: 9
解释: 小偷一晚能够盗取的最高金额 4 + 5 = 9
bash 复制代码
提示:

树的节点数在 [1, 104] 范围内
0 <= Node.val <= 104

解决:

其实就只有两种情况:

  • 当前节点不偷,那最大利润就是左右子树的最大利润之和
  • 当前节点偷,那就是左孩子不偷,右孩子不偷时当前节点的价值
python 复制代码
class Solution:
    def rob(self, root: Optional[TreeNode]) -> int:
        def dfs(root):
            lr1,lr2=(0,0) if not root.left else dfs(root.left)
            rr1,rr2=(0,0) if not root.right else dfs(root.right)
            return max(lr1,lr2)+max(rr1,rr2),lr1+rr1+root.val
        r1,r2=dfs(root)
        return max(r1,r2)
相关推荐
Liangwei Lin5 小时前
LeetCode 118. 杨辉三角
算法·leetcode·职场和发展
YL200404267 小时前
047从前序与中序遍历序列构造二叉树
算法·leetcode
如竟没有火炬10 小时前
字符串相乘——int数组转字符串
开发语言·数据结构·python·算法·leetcode·深度优先
YL2004042613 小时前
046二叉树展开为链表
数据结构·leetcode·链表
如竟没有火炬15 小时前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划
水蓝烟雨15 小时前
2359. 找到离给定两个节点最近的节点
算法·leetcode
阿Y加油吧16 小时前
二刷动态规划经典题:从打家劫舍到完全平方数,Java 实现复盘与优化
leetcode
阿Y加油吧16 小时前
二刷 LeetCode:爬楼梯与杨辉三角,Java 实现复盘
java·算法·leetcode
凌波粒16 小时前
LeetCode--101. 对称二叉树(二叉树)
算法·leetcode·职场和发展
_深海凉_16 小时前
LeetCode热题100-二叉树的最大深度
算法·leetcode·职场和发展