二叉树左视图即层序遍历每层第一个节点,右视图取每层最后一个节点;必须用队列bfs实现,dfs需按root→right→left递归并控制深度覆盖,二者时间复杂度均为o(n)。

二叉树左视图用层序遍历取每层第一个节点
左视图本质是「从左侧垂直投影看到的最外层节点」,等价于层序遍历中每一层的第一个节点。关键不是“最左”,而是“该层最早被访问到的节点”——所以必须用队列按层处理,不能用 DFS 模拟视角。
- 用
queue<treenode></treenode>做 BFS,每次进入新层时记录队首节点值 - 注意:不能只靠
root->left一路递归,因为某层可能左子树为空、右子树有节点,此时左视图仍需包含该右子节点 - 示例:根为 1,左空,右为 2,2 的右为 3 —— 左视图是 [1,2,3],不是 [1](仅靠 left 链会漏掉)
右视图同理但取每层最后一个节点
右视图和左视图共享同一套层序逻辑,区别仅在于每层结束前保存的是最后一个出队的节点,而非第一个。
- 实现上更简单:每层循环结束时,
node自然就是该层最右节点(因为队列顺序是左→右,最后处理的就是最右) - 避免常见错误:不要在循环里用
if (i == levelSize - 1)判断,容易因索引错位漏节点;直接在 for 循环末尾赋值更稳 - 如果用 vector 存当前层所有节点再取 back(),内存开销增大,不推荐
DFS 实现右视图要注意深度优先的覆盖逻辑
DFS 可行,但必须保证「每层最右节点最后被访问」,否则会被左边节点覆盖。核心是:按 root → right → left 顺序递归,并用 vector 下标对应深度。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 定义
vector<int> result</int>,递归参数带当前depth - 当
result.size() == depth时才 push_back,确保每层只存第一个到达的节点(即最右那个) - 若先走 left 再 right,会导致左子树节点先占位,右子树同层节点无法写入 —— 顺序错误是常见坑
- DFS 空间复杂度是 O(h),BFS 是 O(w)(w 为最大层宽),极端偏斜树下 DFS 更省空间
LeetCode 199 验证时注意空树和单节点边界
提交前务必测试 root == nullptr 和只有 root 的情况,这两处最容易返回空或越界。
-
if (!root) return {};必须显式处理,否则 BFS 队列为空导致循环不进,结果为空 vector —— 这是对的,但要确认逻辑清晰 - 单节点树:左视图和右视图都应为
[val],不是[]或[val, val] - 某些实现用
result[depth] = node->val而非 push_back,需预先 resize vector,否则运行时崩溃
实际写的时候,BFS 版本更直白少错;DFS 版本省空间但顺序和边界稍敏感。两种方法都得亲手跑一遍 [1,2,3,null,5,null,4] 这个经典用例,输出 [1,3,4] 才算过关。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










