102. Binary Tree Level Order Traversal
题目大意
Given the root of a binary tree, return the level order traversal of its nodes’ values. (i.e., from left to right, level by level).
中文释义
给定一个二叉树的根节点,返回其节点值的层序遍历结果(即从左到右,逐层遍历)。
示例
示例 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
解题思路
方法
该方法使用层次遍历(广度优先搜索)来遍历二叉树的每个节点,并按层收集节点值。
-
处理空树的情况:
- 如果根节点为空,则返回空的结果列表。
-
使用队列进行层次遍历:
- 使用一个队列
node_queue
存储每层的节点。
- 使用一个队列
-
遍历每一层并收集节点值:
- 对于每一层的节点,从队列中取出并存储其值。
- 将这一层的节点值存储为一个列表,并添加到最终结果中。
-
添加子节点到队列:
- 将当前节点的左右子节点(如果存在)添加到队列中,以便下一轮遍历。
-
更新队列大小:
- 更新队列的大小,准备遍历下一层的节点。
-
返回结果:
- 在遍历完所有层次后,返回包含每层节点值的结果列表。
代码
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if (root == nullptr) return {};
vector<vector<int>> ans;
queue<TreeNode*> node_queue;
node_queue.push(root);
int count = 1;
while (!node_queue.empty()) {
int temp_count = 0;
vector<int> temp_ans;
for (int i = 0; i < count; i++) {
TreeNode* node = node_queue.front();
node_queue.pop();
temp_ans.push_back(node -> val);
if (node -> left) {
node_queue.push(node -> left);
temp_count++;
}
if (node -> right) {
node_queue.push(node -> right);
temp_count++;
}
}
ans.push_back(temp_ans);
count = temp_count;
}
return ans;
}
};