前言
停更几个月了,发现自己的自律能力还是挺差的,所以现在我想到了一个新招:每日一题。很多博主都搞了这一系列,其实挺不错的,可以约束自己。后面多多指教啦!
题目
题目链接:力扣102:二叉树的层序遍历
给你二叉树的根节点 root
,返回其节点值的层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
- 树中节点数目在范围 [0, 2000] 内
- -1000 <=
Node.val
<= 1000
解题思路
这题不算难,可以说是一个基础题。这一类型的基础还有另外三种二叉树的遍历方式的迭代版,都是要掌握的。
这题要把遍历的结果存储起来,题目给的是二维的vector
数组,一层的放在同一维上。所以可以用一个一维的数组存下同一层的,放到二维里。
对于层次遍历当然少不了队列了,用队列的先进先出,一层一层放入,再一层一层拿出即可。具体见代码:
代码(C++)
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode *> queue;
vector<vector<int>> nums;
if (!root)
return nums;
vector<int> ber;
queue.push(root);
while (!queue.empty()) {
int i = queue.size();
ber.clear();
for (int j = 0; j < i; ++ j) {
TreeNode *t = queue.front();
queue.pop();
ber.emplace_back(t->val);
if (t->left)
queue.push(t->left);
if (t->right)
queue.push(t->right);
}
nums.emplace_back(ber);
}
return nums;
}
};
总结
这题是基础题,且必须要熟练掌握,没有什么难点。这题还有其他的解法,但比较麻烦,时间复杂度也没怎么优化,所以没有掌握的必要,这里就不讲解了。