二叉树右视图全解:BFS层序取末位与DFS先右后左
说个实在话二叉树的右视图这道题是我在刷 LeetCode 时反复做了三遍才真正吃透的一道题。题面特别简单给你一棵二叉树让你想象自己站在树的右侧返回从上到下看到的节点值。很多人第一反应是“那我一直往右走不就行了”结果一提交就发现测试用例过不去。其实这道题的核心不是“向右”而是“每层最右边的节点”。只要你理顺了这一点BFS 的层次遍历方案基本就水到渠成了。我比较推荐把这道题当作学习二叉树遍历的“过渡题”来练。它不像前中后序遍历那样需要专门记忆递归/迭代模板也不像重建二叉树那样需要复杂的索引推导但它把“层”这个概念拉得很清楚一层一层地遍历每层只取一个节点。等你能独立写对这道题的 BFS 解法再去做层序遍历、二叉树的深度、树的最大宽度这些题思路会顺畅很多。这篇文章我就把 BFS 解法、DFS 解法、常见运行时错误和变体扩展一次讲透争取让你读完就能直接通刷这一类题。1. 题目到底在问什么右视图不是玄学1.1 站在右侧看到的是什么先看一个最基础的例子。如果一棵树是这样的1 / \ 2 3 \ \ 5 4站在树的右侧看你能看到哪些节点第一层唯一一个节点是 1看到第二层从右侧看2 被 1 挡住但 3 在右边看到第三层5 和 4 都在各自父节点的右侧这时候视线从右边扫过去4 比 5 更靠右所以看到的是 4。最终右视图是[1, 3, 4]。注意一个关键点5 在第二层右子树里但第三层还有一个更靠右的 4所以你看不到 5。如果把 4 删掉答案就变成[1, 3, 5]。这说明了右视图的本质每一层只能有一个节点进入结果且必须是这一层里“最靠右”的那个。这里的“最靠右”不是指路径上的最后一个右孩子而是指在层序遍历顺序里最后被访问到的一个节点。还有一个容易错的细节如果左侧子树特别深那么最后一行看到的可能是左侧子树里的节点。比如根节点只有左子树没有右子树那么站在右边看最后一层能看到的就是左子树最深的那一层最右侧节点。所以“只往右走”是肯定错的要遍历完整棵树才能保证每层都没漏。1.2 BFS 为什么是第一直觉右视图要求按层取节点而 BFS广度优先搜索天然就是按层遍历二叉树的。队列里先放根节点然后一层一层往外弹处理当前节点时把它的左右孩子塞进队列尾部。每一轮循环开始时如果我们知道当前队列里有多少个节点就等于知道了这一层的宽度遍历完这些节点之后队列里剩下的正好是下一层的全部节点。这种“一层一个窗口”的结构就是 BFS 解决树的层次类问题的标准姿势。右视图只是在这个窗口里多做了一个动作记录每一层最后一个被弹出的节点。说白了BFS 负责“把每一层剥出来”我们负责“在每层结束前截取一个值”。所以这道题用 BFS 做几乎是零思考成本。1.3 先纠正一个题号的小误解题目标题写着“52”其实 LeetCode 上这道题的编号是 199题名是 Binary Tree Right Side View。数字可能是某个刷题网站的排序编号或者是自己整理题库时的手写编号并不影响算法本身。我的经验是刷题时不要迷信题号重要的是把题目特征提炼出来——这道题的关键词就是“二叉树 BFS 每层末位节点”。你甚至可以自己给它起一个索引叫“层末节点”以后每次遇到类似题目都往这个索引上靠。2. BFS 解法拆解逐层推进取每层最右2.1 核心思路队列记录整层节点BFS 用队列实现但不同语言的队列写法差异很大。Python 里最标准的是collections.deque它支持 O(1) 的popleft()。如果你用list.pop(0)虽然也能跑但底层是 O(n) 的数组搬移在树节点数量到达十万级的时候性能差距会非常明显。本质上队列在每一轮循环里承载的是“当前层所有节点的集合”我们只要精确控制循环次数等于当前层节点数就能做到层与层之间不串味。这里有个容易写错的点如果你直接把while queue:里弹一个节点、同时把左右孩子入队没有任何计数器那这其实是“平坦遍历”根本不知道哪几个节点是同一层的。要按层取节点必须在外层 while 循环里先记录size len(queue)再写一个内层 for 循环恰好迭代 size 次。每一轮 for 循环结束queue 里就只剩下一层的新节点。2.2 代码实现与逐行注释下面这份 Python 代码我本地实测过可以在 LeetCode 上直接通过。我刻意把注释写得细一些方便你对照。from collections import deque def rightSideView(root): if not root: return [] result [] queue deque([root]) while queue: size len(queue) # 当前层的节点数量 for i in range(size): node queue.popleft() # 从左到右弹出当前层节点 if i size - 1: # 当前层最后一个节点就是右视图该看到的点 result.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) return result为什么要把result.append(node.val)放在if i size - 1里而不是在 for 循环外取queue[-1]因为 for 循环结束时queue 里可能已经混入了下一层的节点queue[-1]不一定是当前层的最后一个节点。更稳妥的做法就是在弹出当前层最后一个节点的那一刻立刻记录值。这属于“当场记录比事后推断更可靠”的典型例子写代码时养成这种习惯能省很多调试时间。如果你想写得再精简一点也可以在 for 循环里不判断i size - 1而是用一个变量last_val每轮更新只保留最后一个弹出的值等内层循环结束后统一 append。本质上一样只是代码看起来更啰嗦。我建议还是用第一种写法判断清晰后续扩展左视图时把判断条件改成i 0就行一行都不用加。2.3 复杂度分析时间 O(n)空间 O(w)时间复杂度是 O(n)因为每个节点只会被访问一次进入队列一次、弹出一次、左右孩子检查一次。无论树怎么变节点总数 n 不会因为算法而增加工作量。很多题目埋的坑在于重复遍历比如递归时每个节点被处理两次之类的但这个 BFS 方案每个节点正好进队一次绝对没有多余操作。空间复杂度稍微讲究一点。最差情况是满二叉树最后一层有大约 n/2 个节点队列里同时可能存着这么多节点所以空间是 O(n)。如果更精确一点写可以写成 O(w)w 是树的最大宽度。普通情况下宽度远小于节点数面试时说 O(w) 会显得你更懂行。还有一种很特殊的退化情况树退化成一条链表每层只有一个节点那么队列始终最多只有一个节点这时候空间复杂度实际上是 O(1)。不过别把这个当作普遍结论因为你没法保证所有测试用例都这么友好。2.4 为什么不能只一路向右走我见过不少人拿到这道题就开始写res [] while root: res.append(root.val) root root.right这种写法对某些恰好每条路径都偏右的树能蒙对比如根节点只有右孩子或者每个节点的右子树都比左子树深。但一旦树里有“左侧深节点”就立刻出错。举个例子1 / \ 2 3 / 4如果只往右走你会拿到[1, 3]但站在树右侧看第三层能看到 4正确答案是[1, 3, 4]。原因很简单4 虽然整体在左子树但站在右侧视线里第三层没有其他节点比它更靠右所以它必须出现在右视图里。理解这一点后你会意识到右视图问题的真正难度不是“选右”而是“不漏层”。只要某一层有节点不管它在根的左边还是右边都要在结果里占据一个位置。而 BFS 对每层都做了全量扫描所以它能保证不漏。这也是为什么 BFS 方案在正确性上天然优于“贪心往右走”的思路。3. DFS 也能做先右后左的“深度优先遍历”3.1 核心思路第一个到达该深度的节点就是答案BFS 是正路但面试时如果你能顺带提一嘴 DFS 版本会显得你对树的遍历理解更立体。DFS 的思路是我们不需要一次性拿到整层节点的集合只需要按“从右到左”的顺序去遍历树那么每一层第一个访问到的节点一定是右视图里该层该出现的节点。这种思路的核心在于“访问顺序比遍历方式更重要”。所以遍历顺序必须是先根再右子树最后左子树。这样在深度为 0 的第一层根节点第一个被访问记录下来深度为 1右孩子先被访问记录下来如果右子树在这个深度没有节点才轮到左子树的节点。换句话说DFS 利用“先右后左”的顺序把每层结果提前占位了。3.2 递归实现与深度记录递归做法里需要一个深度参数来记录当前到了第几层。维护一个结果列表result当depth len(result)时说明这个深度还没有被“占位”当前节点就是右视图的节点。代码如下def rightSideView(root): result [] def dfs(node, depth): if not node: return if depth len(result): result.append(node.val) # 第一个到达该深度的节点必然是最右侧的 dfs(node.right, depth 1) # 先右 dfs(node.left, depth 1) # 后左 dfs(root, 0) return result这个递归只有三行核心逻辑但每一步都很关键。首先是先右后左的顺序绝对不能反。反了就变成左视图了。其次是depth len(result)这个判断它巧妙利用了 result 的当前长度来当作“最深已记录层数”不需要额外建哈希表来记录每层状态。最后是递归终止条件not node这在大规模递归时也很重要漏了它必然报空指针错误。细节上递归深度等于树的高度。如果树退化成一条 5000 层的链表Python 默认递归深度限制大约是 1000直接就会抛RecursionError。这里不是算法错而是语言运行时的限制。要规避的话可以手动把递归改成栈迭代或者用sys.setrecursionlimit临时调高深度。不过面试场景里最好还是主动提一句“递归有爆栈风险工程实现我倾向于 BFS”既显得你懂又不会在极端数据下翻车。3.3 BFS 和 DFS 怎么选如果这是一道面试题我给你的建议是先答 BFS再补充 DFS。BFS 是正解因为它最直观、最好解释DFS 是加分项能展示你对树的遍历顺序有深入理解。分析一下两者的实际差异。BFS 严格要求逐层访问每个节点入队出队一次DFS 是递归深入如果树特别深会有栈溢出的风险而且递归本身也有函数调用开销。从代码量看DFS 的递归版本更短但 BFS 的迭代版本更稳。从工程角度看BFS 更推荐因为你可以把层序模板直接迁移到其他问题里。一个小的经验是如果题目要“返回一个列表”用 BFS 基本没错如果题目要“判断是否存在某种路径”DFS 往往更直接。右视图属于“按层收敛”的问题BFS 永远是主答案。4. 写二叉树程序为什么总报运行时错误4.1 空指针最常见的元凶几乎每一个初学者写二叉树代码都会遇到AttributeError: NoneType object has no attribute left。这个错误在 Python 里叫属性错误在 Java/C 里就是经典的空指针异常。本质上就一个原因你没有判断一个节点是否为 null 就尝试访问它的孩子或值。比如 BFS 里如果你在循环体外先queue deque([root])但 root 本身是 null那么第一轮node queue.popleft()拿到的就不是节点而是空值。就算你第一轮躲过去了如果你在入队时不判断node.left是否为 null而是直接queue.append(node.left)那么队列里会混入空节点。下一轮循环一旦弹出一个空节点程序立刻爆炸。所以我的习惯是任何涉及节点.children 的操作先写if node.left:再写下一行。宁可多写两行判断也不要赌测试用例不会给空节点。4.2 死循环与爆栈两个隐藏陷阱BFS 的死循环通常不是因为队列不空而是因为入队出队的逻辑导致队列里永远有节点。最常见的情况是你在遍历当前层时没有更新 size而是直接在 while 循环里弹出节点再入队这样的话队列会一直存在未处理的节点程序根本退不出来。另一个有点隐蔽的问题是如果你用list模拟队列用了pop(0)在极大输入下虽然不会死循环但时间会极其缓慢最终超时。这个和死循环的报错不一样LeetCode 上会显示 Time Limit Exceeded但要意识到这是数据结构选型的问题不是算法逻辑的问题。DFS 爆栈则是另一类运行时错误。Python 默认递归深度大约是 1000一旦树的高度超过这个值运行时会抛RecursionError: maximum recursion depth exceeded。如果你在牛客或者其他平台用 Java/C对应叫 StackOverflowError。规避方法有三个一是把递归改写成显式的栈迭代二是提前用 BFS 方案三是调用系统接口调大递归上限。第三条适合本地验证不适合线上提交。4.3 输入解析里的坑字符串转列表的隐藏问题LeetCode 的输入看起来是一个数组比如[3,9,20,null,null,15,7]但平台内部已经帮你转成了 TreeNode 对象。可如果你本地写测试脚本模拟输入就会发现一个常见的坑直接把字符串按逗号分割再转 int遇到null就崩了。比如int(null)会直接抛 ValueError。正确的做法是写一个数组转二叉树的辅助函数并明确约定null代表空节点。示例代码不太复杂核心逻辑是用队列逐层建立节点关系。很多“本地运行正常提交就报错”的诡异情况其实都出在这一步并不是你算法本身有问题。def build_tree(arr): if not arr or arr[0] null: return None root TreeNode(int(arr[0])) queue deque([root]) i 1 while i len(arr): node queue.popleft() if arr[i] ! null: node.left TreeNode(int(arr[i])) queue.append(node.left) i 1 if i len(arr) and arr[i] ! null: node.right TreeNode(int(arr[i])) queue.append(node.right) i 1 return root这个函数里还有一个容易被忽略的点层序遍历建树时如果用site:xxx之类的工具去查你会发现它的逻辑和 BFS 一模一样队列里的每个节点都只负责接收自己的左右孩子。实际上这就是反向使用 BFS 的过程先有数组再按层还原树结构。理解了这一点你对 BFS 的理解就不只是“遍历”而是“层次建模”了。4.4 调试二叉树问题的三个技巧第一招打印队列状态。在 BFS 的 while 循环里临时加一行print([node.val for node in queue])能看到每一轮循环前队列里的节点值。只要对照纸上画的树立刻能定位到层边界问题。第二招用最小用例验证。不要一上来就跑大样例先用[1]、[1,2]、[1,2,3]、[1,2,null,4]这类小用例手动推演一遍。我发现至少一半的二叉树 bug 用四五个节点的树就能复现根本不需要造大数据。第三招画图。很多二叉树题做不出来不是因为不会算法而是没把树的结构画出来。把测试用例的树画在纸上然后给 BFS 队列的每一步标序号你会惊奇地发现错误代码几乎每次都在某一个具体步骤上偏离预期。5. 变体与扩展一套 BFS 通吃侧视图系列5.1 左视图怎么改左视图和右视图是同一个问题站在树的左侧看每层最左边的节点进入结果。BFS 代码只需要改一个判断条件把i size - 1改成i 0。因为 BFS 在遍历每层时弹出第一个节点就是该层最左边的节点。DFS 版本呢只要把递归顺序从“先右后左”改成“先左后右”就行。所以当你理解了右视图左视图对你来说就是送分题。我在实际刷题时喜欢把这两个题放在一起练专门对比代码几乎一模一样的微妙变化这样记忆特别牢固。5.2 关于层序遍历的通用模板右视图是层序遍历的“每层取末位”特例。如果你把每层的所有节点都存下来那就是经典的层序遍历def levelOrder(root): if not root: return [] result [] queue deque([root]) while queue: level [] size len(queue) for _ in range(size): node queue.popleft() level.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) result.append(level) return result这个模板比右视图多了level列表但骨架完全一样。它的作用是“一题打通一片”二叉树的锯齿形层序遍历、二叉树的最大宽度、填充每个节点的下一个右侧节点指针都可以在这个模板上微调。比如最大宽度题目只需要把队列里记录节点和下标然后算每层首尾下标的差锯齿形层序只需要用reversed(level)翻转偶数层。这些都是右视图的平行扩展。5.3 与二叉树的深度、搜索二叉树、线索二叉树的关系二叉树的深度用 BFS 也很顺手记录层数每遍历完一层深度加一。甚至可以写成一个函数顺便在右视图里返回最大深度因为右视图的 result 长度就是树高。如果你的面试官问“能不能再输出一下树的高度”你直接说结果列表的长度就是高度会是一个不错的互动点。搜索二叉树和右视图没有直接关系因为右视图不依赖于节点的值大小只关注结构位置。但是搜索二叉树的特性在 DFS 中会影响遍历顺序——如果先右后左正好按节点值从大到小遍历这可以很自然地引出一个话题BST 的降序遍历。如果你在面试中聊到这里面试官往往会有意外的加分感。线索二叉树则是一个古老的话题它把空的左右指针利用起来分别指向前驱和后继节点简化中序遍历。写右视图的时候完全用不到线索二叉树但如果你能说清“普通二叉树遍历的空间开销来自栈或队列线索化是在结构层面省空间”表明你对树的理解不拘泥于刷题。5.4 这道题还能怎么考面试官最常见的变形是给定一棵普通二叉树请你输出从右下角看过去的节点序列。这个“右下角”其实就是右视图的最后一个节点本质上就是最下面一层最右侧的节点BFS 直接处理就行。还有一种考法是结合“N 叉树”。如果节点有任意多个子节点右视图如何定义答案仍然是每层最后一个节点BFS 结构完全不变只要把检查左右孩子改成遍历 children 列表。这种题能考你对 BFS 模板的迁移能力。再进阶一点考“求树的最大宽度”。这个题和右视图一样需要层边界但要额外记录每个节点的下标。千万不要慌核心还是层序遍历只是把节点值换成下标计算。如果你前面把基础模板吃透了这个变形只是多一个变量的事。6. 实操中的一点心得体会6.1 我练这道题时踩过的两个坑我第一次写这道题的 BFS 时没有记录size直接在 while 循环里弹出节点并加入孩子结果结果集里出现了大量重复的中间层节点。那时候我才意识到BFS 的“层”不是队列天然具备的属性而是需要靠计数器人为划出来的。后来我把这个经验总结成一句话队列只负责提供下一个要处理的节点层边界必须由代码自己维护。这句话我用在哪里都不过时。第二个坑是在分析复杂度时把空间复杂度简化成了 O(n)结果被面试官反问了一句“能不能说说队列在满二叉树下的最大容量”。我当时愣了一下后来才反应过来满二叉树的最后一层约有 n/2 个节点队列里同时存这么多节点是很正常的事情。从这之后凡是涉及 BFS 的题我都会顺手说一句空间复杂度是 O(w)w 表示最大宽度而不是笼统地讲 O(n)。6.2 刷题之外的一个长期收益说实话这种题在真实业务开发里出现的概率不高你不太可能在生产环境给一棵树拍“右侧照片”。但 BFS 的层次处理思想会在很多地方用到多级评论系统的按层加载、社交网络的好友推荐层级、文件目录的逐层扫描甚至后台任务按依赖层级调度底层逻辑都类似。学会了维护队列中的“层边界”你在处理这些数据时就不会只盯着单个节点而忽略整体节奏。6.3 最后的实操建议如果你现在准备笔试面试我建议你从今天开始把“二叉树的右视图”当作一道主题模板题给自己安排三件事1用 BFS 实现一遍2用 DFS 先右后左实现一遍3把左视图的改动也写出来。三道代码放在一起对比比单独刷三道新题更有效。我再给你一个练习路径先右视图再二叉树的最大深度再层序遍历再锯齿形层序四道题全部用 BFS 层模板完成。等你做最后一题能不看模板默写时这类“层相关”的二叉树题目基本上就再也难不住你了。

相关新闻

Spring Boot热部署实战:DevTools、自动重启与热加载方案全解析

Spring Boot热部署实战:DevTools、自动重启与热加载方案全解析

1. 为什么说 Spring Boot 热部署是"开发体验的分水岭"先聊一个很多 Java 开发者都经历过的场景:你在一个 Controller 里改了个接口的返回值,然后按下 CtrlF10 或者重启应用,等待漫长的启动日志刷屏。如果项目稍微大一点&#xff0c…

2026/10/12 8:43:29 阅读更多 →
稀疏、密集、二进制向量选型与Milvus实战全解

稀疏、密集、二进制向量选型与Milvus实战全解

做向量检索这几年,我接到最多的一个问题不是"Milvus 怎么用",而是"我到底该用稀疏向量、密集向量还是二进制向量"。很多人默认三种向量只是精度和存储的取舍,实际完全不是一回事——稀疏、密集、二进制对应的是三种不同的…

2026/10/12 8:43:29 阅读更多 →
cli-continues会话管理5大命令:list、scan、inspect、dump、rebuild使用清单

cli-continues会话管理5大命令:list、scan、inspect、dump、rebuild使用清单

【免费下载链接】cli-continues resume any AI coding session in another tool — Claude Code, Copilot, Gemini, Codex, Cursor 项目地址: https://gitcode.com/gh_mirrors/cl/cli-continues 点击查看 免费下载 cli-continues(npm 包名 continues&am…

2026/10/12 8:42:27 阅读更多 →

最新新闻

数据复制深度拆解:从HDFS块复制到CDC同步的机制、实践与容灾设计

数据复制深度拆解:从HDFS块复制到CDC同步的机制、实践与容灾设计

大数据领域做久了,你会发现一个很朴素但又绕不开的现实: 数据复制 几乎贯穿了所有核心系统的生命周期。无论是离线数仓里的表同步、实时链路里的CDC采集,还是跨机房容灾里的镜像复制,本质上都在做同一件事——把一份数据从A点搬…

2026/10/12 9:23:59 阅读更多 →
开源大模型权重质变:推理优化、量化与微调工程实践指南

开源大模型权重质变:推理优化、量化与微调工程实践指南

1. 从"权重开放"到"能力平权":一场静默的行业拐点 过去两年,我一直在跟踪各类开源模型权重发布后的实际落地情况。说实话,早期大部分所谓"开放权重"的模型,更多是实验室里的展示品——参数量大、推…

2026/10/12 9:23:59 阅读更多 →
配电网多目标Pareto重构:Matlab实现NSGA-II的实战经验与代码解析

配电网多目标Pareto重构:Matlab实现NSGA-II的实战经验与代码解析

配电网多目标Pareto重构,核心就一句话:通过改变分段开关和联络开关的开合状态,重新编排配电网的供电路径,让网损、电压质量、开关操作成本等多个目标同时尽可能好。这个问题我前后做了一段时间,用Matlab实现了多套智能…

2026/10/12 9:23:59 阅读更多 →
把手机变成AI服务器:openclaw-termux SSH远程访问配置实战教程

把手机变成AI服务器:openclaw-termux SSH远程访问配置实战教程

AI 应用LLM 网关大模型移动开发 【免费下载链接】openclaw-termux Run OpenClaw AI Gateway on Android — standalone Flutter app with built-in terminal, web dashboard, and one-tap setup. Also available as a Termux CLI package. 项目地址: https://gitcod…

2026/10/12 9:23:58 阅读更多 →
自己动手实现TreeMultiSet:基于TreeMap的有序可重复集合

自己动手实现TreeMultiSet:基于TreeMap的有序可重复集合

1. 从一个真实的数据统计需求说起去年帮一个做电商的朋友处理订单数据时&#xff0c;遇到一个挺典型的问题&#xff1a;他们需要统计每个商品在一天内的被下单次数&#xff0c;并且要按商品ID排序输出。第一反应是用TreeMap<Long, Integer>&#xff0c;key 是商品ID&…

2026/10/12 9:22:58 阅读更多 →
PS5折腾指南:系统配置、存储扩展、远程游玩与散热维护

PS5折腾指南:系统配置、存储扩展、远程游玩与散热维护

PS5到手三个月后&#xff0c;我发现自己陷入了一个尴尬循环&#xff1a;开机看一眼、随便通关一个进度、然后切出去看手机&#xff0c;主机外壳摸起来都能煎鸡蛋。直到我给自己定了个"AnyPS5"计划——不把这台机器当普通游戏机&#xff0c;而是当成一台可折腾的娱乐终…

2026/10/12 9:22:58 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天&#xff0c;画面可以做到绝对的锐利、平滑与无瑕。然而&#xff0c;当一张秋日手账插画或拍立得照片过于“平整无瑕”时&#xff0c;往往会散发出一种冰冷生硬的“数码塑料感&#xff08;Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中&#xff0c;横排&#xff08;Horizontal Layout&#xff09;早已经成为了绝对的主流。然而&#xff0c;当我们翻开泛黄的线装古籍、宋版木刻诗集&#xff0c;或是欣赏一张茶道雅集的手写便签时&#xff0c;那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点&#xff0c;很多人心里都会悄悄亮起一盏警示灯。 在心理学上&#xff0c;这种现象有一个专门的称谓——“周日夜晚焦虑症&#xff08;Sunday Scaries&#xff09;”。明天又是周一&#xff0c;闹钟又要重新在七点响彻卧房&#xff1b;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →