当前位置: 首页 > news >正文

(LeetCode 动态规划(基础版) )337. 打家劫舍 III (深度优先搜索dfs)

题目:337. 打家劫舍 III

在这里插入图片描述
在这里插入图片描述

思路:深度优先搜索dfs,时间复杂度0(n)。

每个节点,都有选和不选的权利,但选的话,当前子树的左右节点都不能选。细节看注释

C++版本:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public://以root为根的子树,选or不选pair<int,int> dfs(TreeNode * root){if(root==nullptr) return {0,0};pair<int,int> left=dfs(root->left);pair<int,int> right=dfs(root->right);// 选int t1=root->val+left.second+right.second;// 不选int t2=max(left.first,left.second)+max(right.first,right.second);return {t1,t2};}int rob(TreeNode* root) {pair<int,int> p=dfs(root);return max(p.first,p.second);}
};

JAVA版本:

/*** 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 {int[] dfs(TreeNode root){if(root==null){return new int[]{0,0};}int[] left=dfs(root.left);int[] right=dfs(root.right);//选int t1=left[1]+right[1]+root.val;// 不选int t2=Math.max(left[0],left[1])+Math.max(right[0],right[1]);return new int[]{t1,t2};}public int rob(TreeNode root) {int[] ans=dfs(root);return Math.max(ans[0],ans[1]);}
}

Go版本:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func rob(root *TreeNode) int {t1,t2:=dfs(root)return max(t1,t2)
}
func dfs(root *TreeNode) (int,int) {if root == nil {return 0,0}left_ok,left_no := dfs(root.Left)right_ok,right_no := dfs(root.Right)// 选t1:=root.Val + left_no + right_no// 不选t2:= max(left_ok,left_no)+max(right_ok,right_no)return t1,t2
}

相关文章:

  • [特殊字符] Altair:用Python说话,让数据自己讲故事!!!
  • SpringBoot使用oshi获取服务器相关信息
  • innovus自动绕RDL线
  • GIS数据制备,空间分析与高级建模实践技术应用
  • C++异常处理深度解析:try-catch全方位指南
  • GPT-ArcGIS 在生态评价中的综合应用:多因子权重分析与适宜性制图
  • aardio 类与对象基础
  • 中钧科技三大平台破局企业数字化转型:告别“人肉运维”,拥抱“数据自驱”!
  • Python基础数据类型与运算符全面解析
  • 【WebSocket】WebSocket 多功能集成冲突问题解决方案
  • Charles里怎么进行断点调试
  • 用Python撬动量化交易:深入探索开源利器vnpy
  • 理解系统交互:UML时序图
  • 【Kubernetes】架构与原理:核心概念、组件协同及容器化部署解析
  • 数据库管理与高可用-PostgreSQL日常维护
  • 手机解压 7z 文件全攻略
  • 稳定币的监管
  • Etcd数据持久化机制:WAL与Snapshot解析
  • Springboot中 MyBatis-Flex TableDef 的使用
  • 宝塔安装MySQL无法远程连接【已解决】
  • wordpress导航菜单404/360优化大师安卓下载
  • 如何维护网站建设/本溪seo优化
  • layui做的网站/自己的网站怎么在百度上面推广
  • 学习制作网页的网站/网站权重排名
  • 专业网站建设开发/百度有几种推广方式
  • 做网站一定要买服务器么/二手交易平台