二叉树的层序遍历 II
443 字
2 分钟
二叉树的层序遍历 II
题目链接:107. 二叉树的层序遍历 II - 力扣(LeetCode)
- 难度:🟡 中等
- 标签:树、广度优先搜索、二叉树
题目描述
Note
原题说明:
给你二叉树的根节点 root ,返回其节点值 自底向上 的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)。
示例 1
graph TD
3((3)) --- 9((9))
3((3)) --- 20((20))
20((20)) --- 15((15))
20((20)) --- 7((7))
style 15 fill:#d1e8ff,stroke:#333,stroke-width:2px
style 7 fill:#d1e8ff,stroke:#333,stroke-width:2px
输出:[[15, 7], [9, 20], [3]]
方案:BFS + 结果反转
核心思路: 这道题其实非常简单,只需要把 102. 二叉树的层序遍历 的结果反过来输出就行。
源码实现
#include <algorithm> // 为了使用 reverse#include <queue>#include <vector>
class Solution {public: vector<vector<int>> levelOrderBottom(TreeNode* root) { vector<vector<int>> ans; if (!root) return ans;
queue<TreeNode*> q; q.push(root);
while (!q.empty()) { int sz = q.size(); vector<int> curLevel;
// 标准层序遍历逻辑 for (int i = 0; i < sz; ++i) { TreeNode* node = q.front(); q.pop(); curLevel.push_back(node->val);
if (node->left) q.push(node->left); if (node->right) q.push(node->right); } ans.push_back(move(curLevel)); }
// 调用标准库函数 reverse,将自顶向下的结果反转为自底向上 reverse(ans.begin(), ans.end());
return ans; }};复杂度分析
- 时间复杂度:。层序遍历耗时 ,最后的
reverse耗时 ,总复杂度仍为线性。 - 空间复杂度:。主要是队列和结果容器的开销。
总结
- 举一反三:很多算法题都是在经典题目上的“微调”。掌握了 102 题的 BFS 模板,本题只是多了一行
reverse。 - 工具库的使用:在面试中,熟练调用
std::reverse等标准库函数体现了你对 C++ 工具链的熟悉程度。
Tip
如果题目要求“自底向上”,最稳妥且最高效的办法往往是先“正常做”,最后再一键反转!
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
最后更新于 2025-11-07,距今已过 173 天
部分内容可能已过时
相关文章 智能推荐
1
二叉树的层序遍历
算法 力扣第102题:二叉树的层序遍历。掌握广度优先搜索(BFS)的核心机制,学习如何按层级剥开树结构的逻辑脉络。
2
二叉树的中序遍历
算法 力扣第94题:二叉树的中序遍历。从递归的简洁到迭代的深度剖析,掌握树结构遍历的核心逻辑。
3
二叉树的最大深度
算法 力扣第104题:二叉树的最大深度。深入理解递归与广度优先搜索(BFS)在计算树结构深度时的应用场景。
4
对称二叉树
算法 力扣第101题:对称二叉树。深入理解树的镜像对称性质,掌握递归与迭代两种姿势下的双向比对技巧。
5
相同的树
算法 力扣第100题:相同的树。利用深度优先搜索(DFS)的递归特性,优雅地判断两棵二叉树的结构与数值一致性。
随机文章 随机推荐