一、算法描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
示例1
输入:{1,2}
返回值:[[1],[2]]
二、解题思路
使用队列来存储每一层的节点,并依次遍历它们的左右子节点,直到队列为空。其中,每一层的节点数量等于队列的大小,可以通过每一次循环前获取队列的大小来实现。
三、C++代码实现
#include <iostream>
#include <queue>
using namespace std;
// 定义二叉树的节点结构
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
// 二叉树的层次遍历算法
void levelOrder(TreeNode* root) {
// 如果二叉树为空,直接返回
if (root == nullptr) {
return;
}
// 创建一个队列,存储每一层的节点
queue<TreeNode*> q;
// 将根节点加入队列
q.push(root);
// 当队列非空时,遍历每一层的节点
while (!q.empty()) {
// 获取当前层的节点数量
int size = q.size();
// 遍历当前层的所有节点
for (int i = 0; i < size; i++) {
// 取出队首的节点
TreeNode* node = q.front();
// 将节点的值输出
cout << node->val << " ";
// 将节点的左子节点加入队列
if (node->left != nullptr) {
q.push(node->left);
}
// 将节点的右子节点加入队列
if (node->right != nullptr) {
q.push(node->right);
}
// 弹出队首的节点
q.pop();
}
// 输出换行符,表示该层遍历结束
cout << endl;
}
}
int main() {
// 构建二叉树
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
root->right->left = new TreeNode(6);
root->right->right = new TreeNode(7);
// 层次遍历二叉树
levelOrder(root);
return 0;
}