dfs|bfs建图

lc1001

discussion发现的圣经

反复诵读TvT

"每个变量、每个逻辑分支对内完成的是什么功能、对外在整体程序中扮演的角色是什么"

"对待游戏一样享受这个过程"

lc2385

dfs不建图

利用负数,一次遍历

class Solution {
int ans = 0, start;

int dfs(TreeNode* node) {
if (node == nullptr) {
return 0;
}
int l_len = dfs(node->left);
int r_len = dfs(node->right);
if (node->val == start) {
// 计算子树 start 的最大深度
ans = -min(l_len, r_len); // 负负得正
return 1; // 用正数表示找到了 start
}
if (l_len > 0 || r_len > 0) {
// 只有在左子树或右子树包含 start 时,才能更新答案
ans = max(ans, abs(l_len) + abs(r_len)); // 两条链拼成直径
return max(l_len, r_len) + 1; // max 会自动取到正数
}
return min(l_len, r_len) - 1; // 用负数表示没有找到 start
}

public:
int amountOfTime(TreeNode* root, int start) {
this->start = start;
dfs(root);
return ans;
}
};

bfs建图

一次bfs建表

一次bfs找最远层数

class Solution {
public:
int amountOfTime(TreeNode* root, int start) {
unordered_map<TreeNode*, TreeNode*> p;
TreeNode* s = nullptr;
queue<TreeNode*> q;
q.push(root);
p[root] = nullptr;
while (!q.empty()) {
auto t = q.front();
q.pop();
if (t->val == start) s = t;
if (t->left) {
p[t->left] = t;
q.push(t->left);
}
if (t->right) {
p[t->right] = t;
q.push(t->right);
}
}

unordered_map<TreeNode*, bool> v;
q.push(s);
v[s] = true;
int res = -1;
while (!q.empty()) {
int sz = q.size();
res++;
while (sz--) {
auto t = q.front();
q.pop();
if (t->left && !v[t->left]) {
v[t->left] = true;
q.push(t->left);
}
if (t->right && !v[t->right]) {
v[t->right] = true;
q.push(t->right);
}
if (p[t] && !v[p[t]]) {
v[p[t]] = true;
q.push(p[t]);
}
}
}
return res;
}
};

dfs建图+bfs

class Solution {
public:
int amountOfTime(TreeNode* root, int start) {
unordered_map<int, vector<int>> g;
function<void(TreeNode*)> dfs = [&] (TreeNode *root) {
if (root == nullptr || root->left == root->right)
return;


if (root->left) {
int u = root->val, v = root->left->val;
g[u].emplace_back(v);
g[v].emplace_back(u);
}

if (root->right) {
int u = root->val, v = root->right->val;
g[u].emplace_back(v);
g[v].emplace_back(u);
}

dfs(root->left);
dfs(root->right);
};
dfs(root);

int time = -1;
queue<int> q;
q.push(start);
unordered_set<int> visited{start};
while (!q.empty()) {
time++;
int len = q.size();
while (len--) {
int cur = q.front();
q.pop();
for (int nei : g[cur]) {
if (visited.find(nei) != visited.end()) {
continue;
}
q.push(nei);
visited.insert(nei);
}
}
}
return time;
}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1159925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在3分钟内为Windows 11 LTSC系统安装微软商店:完整指南

如何在3分钟内为Windows 11 LTSC系统安装微软商店&#xff1a;完整指南 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 当你在使用Windows 11 LTSC企业…

终极指南:用Topit窗口置顶彻底改变你的Mac工作流

终极指南&#xff1a;用Topit窗口置顶彻底改变你的Mac工作流 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否经常在Mac上遇到这样的困扰&#xff1a;重要…

FFXIV辍学插件终极指南:3步快速跳过烦人动画

FFXIV辍学插件终极指南&#xff1a;3步快速跳过烦人动画 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还在为FF14副本中那些冗长的过场动画感到烦恼吗&#xff1f;FFXIV辍学插件正是你需要的完美解决…

说说你对内部类的理解

说说你对内部类的理解 章节目录 文章目录说说你对内部类的理解1. 什么是内部类&#xff1f;2. 内部类的类型有哪些&#xff1f;3. 成员内部类4. 局部内部类5. 匿名内部类6. 静态内部类7. 内部类的作用是什么&#xff1f;8. 内部类的优缺点是什么&#xff1f;9. 内部类的生命周…

Strings与newString有什么区别

Strings与newString有什么区别 章节目录 文章目录Strings与newString有什么区别Java中字符串可以通过两种方式创建&#xff1a; 使用字符串字面量直接赋值给变量或 使用关键字new创建一个新的String对象。它们之间有以下区别&#xff1a;**首先&#xff0c;**使用字符串字面量…

Make与Makefile概述

Make与Makefile概述 引言&#xff1a;来自贝尔实验室的遗产 1977年&#xff0c;贝尔实验室的Stuart Feldman为了解决软件构建中的依赖管理问题&#xff0c;创造了一个改变软件开发历史的小工具——make。45年后的今天&#xff0c;这个工具仍然活跃在无数项目的构建系统中&#…

程序构建系统概述

程序构建系统概述 引言&#xff1a;为什么需要构建系统&#xff1f; 想象一下&#xff0c;你正在开发一个包含数百个源文件、依赖多个外部库的复杂软件项目。每次修改后&#xff0c;你都需要手动执行编译、链接、测试和打包等一系列操作——这不仅是枯燥的重复劳动&#xff0c;…

DDoS攻击详解_ddos攻击流程,零基础入门到精通,收藏这篇就够了

一、DDoS是什么&#xff1f; 首先DDoS的缩写是&#xff08;Distributed Denial of Service&#xff0c;简称DDoS&#xff09;&#xff0c;即分布式拒绝服务&#xff0c;是指黑客将多台计算机联合起来作为攻击平台&#xff0c;通过远程连接&#xff0c;利用恶意程序对一个或多个…

小红书无水印下载高效完整指南:零基础一键操作全攻略

小红书无水印下载高效完整指南&#xff1a;零基础一键操作全攻略 【免费下载链接】XHS-Downloader 免费&#xff1b;轻量&#xff1b;开源&#xff0c;基于 AIOHTTP 模块实现的小红书图文/视频作品采集工具 项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader …

python基于flask框架 仓库库存管理系统设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 本系统基于Python的Flask框架设计并实现了一个仓库库存管理系统&#xff0c;旨在解决中小型企业或个体商户在库存管理中的效率…

一篇关于内网渗透基础的知识分享(非常详细)从零基础到精通,收藏这篇就够了!

大纲一、网络情况 网络情况就是在我们对内网主机渗透时候&#xff0c;可能遇到的通信问题以及解决方法。 1、网络设备链接问题导致不能出网 场景(后续操作也是这个场景下的)&#xff1a; 当拿下一台外网的A主机后&#xff0c;想要对于其所在的内网继续渗透时&#xff0c;发现其…

python基于flask框架 农产品销售供应商管理系统

目录 农产品销售供应商管理系统摘要 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 农产品销售供应商管理系统摘要 该系统基于Python Flask框架开发&#xff0c;旨在为农产品销售企业提供…

【C++入门】Cyber骇客的同名异梦——【C++重载函数】(与C的函数差异)

⚡ CYBER_PROFILE ⚡/// SYSTEM READY /// [ WARNING ]: DETECTING HIGH ENERGY &#x1f30a; &#x1f309; &#x1f30a; 心手合一 水到渠成 >>> ACCESS TERMINAL <<< [ &#x1f9be; 作者主页 ] [ &#x1f525; C语言核心 ] [ &#x1f4b…

基于西门子 PLC S7 - 1200 系列的立体车库设计之旅

基于西门子PLC S7-1200系列的立体车库&#xff0c;立体库设计。 有流程图&#xff0c;电气原理图&#xff0c;IO表&#xff0c;流程图和文字报告等等 可以wincc仿真运行2-2287嘿&#xff0c;各位技术宅们&#xff01;今天咱来聊聊基于西门子 PLC S7 - 1200 系列的立体车库设计&…

【漏洞挖掘】小白是如何挖漏洞的(技巧篇)入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

目录&#xff1a; 怎么找漏洞 找到后如何挖漏洞 关于通杀漏洞N day漏洞的挖掘 漏洞如何提交 每小结都有提供对应的案例&#xff0c;简直不要太nice&#xff01; 这个月的SRC活动也快开始了&#xff0c;看到群里的小伙伴在问如何找漏洞&#xff0c;SQL注入的漏洞咋找&#xff0c…

ESP32C3串口下载关键引脚及触发方法

串口下载 手册原文关键引脚操作方式 核心必接引脚&#xff1a; 最基础的下载连接只需接 U0RXD、U0TXD、GND、3.3V、GPIO9、EN 这 6 个引脚&#xff08;其中 GPIO9和 EN 是控制下载模式的关键&#xff09;。 注意&#xff1a;电脑端的 USB-TTL 模块的 TX 要接 ESP32 的 RX&#…

功率电路IGBT吸收电容原理,吸收电容选型

吸收电容原理 一、IGBT开关过程中的电压尖峰成因 1.寄生电感效应 IGBT在关断瞬间&#xff0c;电流变化率(di/dt)急剧增大。由于主回路中存在的线路电感(Lstray)及器件封装寄生电感(Lpar)&#xff0c;根据公式&#xff1a;产生的反向电动势会叠加在IGBT的集电极-发射极电压(VCE)…

三甲医院如何实现业务“零中断”?基于zData X一体机的数据库灾备体系实践分享

在医疗行业&#xff0c;信息系统早已成为医院运行不可分割的一部分。HIS、EMR、LIS、PACS这类关键业务系统背后的数据库&#xff0c;不仅承载着高频业务访问&#xff0c;更直接关系到医疗服务的连续性与安全性&#xff0c;影响着门诊秩序、临床流程、就医体验&#xff0c;甚至患…

如何粘贴为纯文本?WORD如何粘贴为纯文本?如何把“CTRL+SHIFT+V”改为“粘贴为纯文本”

工作中我们编辑WORD时&#xff0c;需要粘贴为纯文本&#xff0c;但有时又希望带格式粘贴。 如何默认“CTRLV”为带格式粘贴&#xff0c;而“CTRLSHIFTV”为粘贴为纯文本呢&#xff1f; 下载POWERTOYS 下载链接&#xff1a; 【免费】PowerToys安装程序&#xff08;微软系统增强…

泰裤辣!NGS数据过滤:从“大怨种”到“高质量数据”

做NGS&#xff08;下一代测序/高通量测序&#xff09;实验时&#xff0c;我们总盼着测序仪“吐”出的原始数据能直接用——毕竟从样本制备到上机测序&#xff0c;每一步都耗费了时间和经费。但现实是&#xff0c;刚拿到的原始数据里藏着不少“杂质”&#xff0c;直接用来分析只…