首页 > 其他分享 >动态规划(17)、337. 打家劫舍III

动态规划(17)、337. 打家劫舍III

时间:2023-03-21 10:57:29浏览次数:50  
标签:right val 17 III 337 null root dp left

题目连接:337. 打家劫舍 III - 力扣(LeetCode)

 

 

题目分析:

  二叉树的后续遍历,dp[root] 表示 root节点的最大收益

        dp[root] = max(dp[root.left] + dp[root.right], root.val + dp[root.left.left] + dp[root.left.right] + dp[root.right.left] + dp[root.right.right])

我们可以在原始的二叉树上进行记录,因为题目中没有说不允许改变二叉树的内容;

我们使用二叉树的后续遍历,当前节点的最大收益为取当前节点,和不取当前节点的最大值,不取当前节点的话那就是两个子数的根节点

的值之和,如果取当前节点的话,由于不能相邻的节点一起偷,所以这时候其收益为当前节点的数值加上左节点的左右节点的数值和右节

点的左右节点数值之和(如果他们存在的话)

 

代码实现如下:

  

/**  * Definition for a binary tree node.  * public class TreeNode {  *     int val;  *     TreeNode left;  *     TreeNode right;  *     TreeNode() {}  *     TreeNode(int val) { this.val = val; }  *     TreeNode(int val, TreeNode left, TreeNode right) {  *         this.val = val;  *         this.left = left;  *         this.right = right;  *     }  * }  */ class Solution {     public int rob(TreeNode root) {         // 二叉树的后续遍历,dp[root] 表示 root节点的最大收益         // dp[root] = max(dp[root.left] + dp[root.right],              // root.val + dp[root.left.left] + dp[root.left.right] + dp[root.right.left] + dp[root.right.right])
        dfs(root);
        return root.val;     }

    public void dfs(TreeNode root) {         if (root == null) {             return;         }
        dfs(root.left);         dfs(root.right);
        root.val = Math.max(             (root.left == null ? 0:root.left.val) +              (root.right == null? 0:root.right.val),              root.val +              (root.left == null? 0: (root.left.left == null ? 0: root.left.left.val)) +             (root.left == null? 0: (root.left.right == null ? 0: root.left.right.val)) +              (root.right == null? 0: (root.right.left == null ? 0: root.right.left.val)) +             (root.right == null? 0: (root.right.right == null ? 0: root.right.right.val))          );
    } }   复杂度分析:时间复杂度 O(n)                      空间复杂度:O(n) 递归实现的本质也是系统帮我们建立了栈结构,而系统栈需要记住每个节点的值,所以空间复杂度仍为O(n)。

 

标签:right,val,17,III,337,null,root,dp,left
From: https://www.cnblogs.com/arvinbrick/p/17239154.html

相关文章

  • allegro17.2 画封装如何定位原点?
      2.鼠标要放在 pin脚周围,右健捕获管脚snappickto---pin,即可设置原点到管脚中心。注意画焊盘时就要把原点定位在shape中心位置。 ......
  • IC5141和617——ASSURA配置
    前言在系统中同时安装了IC5141和IC617,但是ASSURA的版本号不同,对于两个软件不能通用。在分别安装后,通过自定义控制台命令,切换环境变量ASSURAHOME的值,从而达到对两个版本的......
  • P3747 [六省联考 2017] 相逢是问候
    [六省联考2017]相逢是问候P3747[六省联考2017]相逢是问候题目描述Informatikverbindetdichundmich.信息将你我连结。B君希望以维护一个长度为\(n\)的数......
  • 洛谷 P3758 [TJOI2017]可乐
    https://www.luogu.com.cn/problem/P3758给定一张图。一个机器人在1号点,每次它可以选择留在原地,沿一条边行走一次,自爆。机器人自爆后无法进行任何操作,求t时间内它所有可......
  • 3月17日课后总结
    3/17课后总结绑定方法""" 一般来说,在类里定义的属性和方法都是默认绑定给对象的 绑定给对象的方法,就需要对象来调用"""classDog:def__init__(self,name):......
  • loj6144「2017 山东三轮集训 Day6」C
    loj6144「2017山东三轮集训Day6」C注意到修改只有位运算,容易想到将位拆开考虑。首先可以发现对某一位或上\(0\)或者是对某一位与上\(1\)是没有意义的,相当于没有操作......
  • 17
    建立一套以数据采集为基础,数据分析、统计、管控为核心的综合性能源管理系统,详细需求描述如下:1、数据收集功能:生产区域以车间为主体,通过计量仪表远程收集蒸汽、冷凝水、电、......
  • 2023/03/17(五)阴,有雨;第一次没收手机
    因为知道今天是六年级的卒业式,估计他俩中午前会放学回家,家里提前准备好做好的炒茄子和米饭;头天晚上给孩子们布置任务:放学回家下午记得互相检查五十音图的学习结果。上班......
  • VMware Workstation Pro 17详细下载教程
    账号账号:[email protected]密码:@Vmware2022有效许可码:JU090-6039P-08409-8J0QH-2YR7F如果点击下载没有登录会先跳转到登录页,登录后才能下载!!!下载进入Vmware官......
  • LeetCode337周赛T4 -- 同余
    1.题目描述T42.思路其实本题非常简单。我们只需要知道一个概念:“同余”。即:\(a==b(modc)\),我们称\(a\)和\(b\)相等在\(modc\)意义下。知道了这个点,......