news 2026/4/23 21:58:34

dfs|bfs建图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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;
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 20:30:14

如何在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企业…

作者头像 李华
网站建设 2026/4/23 16:56:02

说说你对内部类的理解

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

作者头像 李华
网站建设 2026/4/18 4:56:41

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

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

作者头像 李华
网站建设 2026/4/21 0:15:14

汽车动力学模型探究:线性二自由度、Carsim与运动学模型

线性二自由度模型&#xff0c;对比carsim模型&#xff0c;运动学模型在汽车动力学研究领域&#xff0c;线性二自由度模型、Carsim模型以及运动学模型各自有着独特的地位和应用场景&#xff0c;今天咱就来唠唠它们之间的对比。 线性二自由度模型 线性二自由度模型算是汽车动力学…

作者头像 李华
网站建设 2026/4/22 15:07:48

亲测售后完善的勒索病毒解密服务

亲测售后完善的勒索病毒解密服务 行业痛点分析 在当今数字化时代&#xff0c;数据恢复领域面临着诸多技术挑战&#xff0c;尤其是勒索病毒的肆虐&#xff0c;给企业和个人带来了巨大的数据安全威胁。勒索病毒通过加密用户数据&#xff0c;迫使受害者支付赎金以恢复数据。测试…

作者头像 李华
网站建设 2026/4/23 16:21:45

2026年LinkedIn 潜在客户开发的7 个常见误区

LinkedIn 仍然是 B2B 潜在客户开发的核心阵地&#xff0c;但进入 2026 年后&#xff0c;很多团队发现一个明显变化&#xff1a; 消息没少发&#xff0c;回复却越来越低&#xff0c;账号还频繁受限。问题往往不在「你发没发」&#xff0c;而在于方式是否踩中了平台风控与用户心理…

作者头像 李华