层序遍历二叉树的代码
时间: 2024-06-11 16:03:00 浏览: 97
层序遍历二叉树是一种广度优先搜索的算法,其过程如下:
1. 首先将根节点入队列
2. 当队列不为空时,取出队列的头部元素,并输出该节点的值
3. 如果该节点有左子节点,则将左子节点入队列
4. 如果该节点有右子节点,则将右子节点入队列
5. 重复步骤2-4,直到队列为空
下面是一份示例代码:
```
void levelOrderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
TreeNode* cur = q.front();
q.pop();
cout << cur->val << " ";
if (cur->left != nullptr) {
q.push(cur->left);
}
if (cur->right != nullptr) {
q.push(cur->right);
}
}
}
```
相关问题
给我一个c的层序遍历二叉树代码
在C语言中,层序遍历(也称为广度优先搜索,BFS)二叉树通常使用队列数据结构来辅助实现。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* newNode(int data) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 层序遍历函数
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
// 使用队列存储每一层的节点
Queue* queue = createQueue(); // 假设createQueue()函数用于创建空队列
enqueue(queue, root); // 将根节点入队
while (!isEmpty(queue)) {
// 弹出队首元素并打印
TreeNode* node = dequeue(queue);
printf("%d ", node->val);
// 如果节点有左、右子节点,将它们入队
if (node->left != NULL) {
enqueue(queue, node->left);
}
if (node->right != NULL) {
enqueue(queue, node->right);
}
}
destroyQueue(queue); // 清理队列
}
int main() {
// 假设你已经有一个实际的二叉树,并将其根节点赋值给root
TreeNode* root = ...; // 你的二叉树根节点
levelOrderTraversal(root);
printf("\n");
return 0;
}
```
在这个例子中,`createQueue()`和`destroyQueue()`是用来创建和销毁队列的函数,`enqueue()`表示向队列添加元素,`dequeue()`表示移除并返回队列的第一个元素,`isEmpty()`则检查队列是否为空。
c语言层序遍历二叉树完整代码
在C语言中,层序遍历(广度优先搜索,Breadth-First Search,简称BFS)二叉树通常使用队列数据结构来辅助实现。以下是完整的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <queue>
// 定义二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 层序遍历函数
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
// 创建一个空队列用于存储节点
queue<TreeNode*> q;
// 将根节点入队
q.push(root);
while (!q.empty()) {
// 弹出队首元素,并打印其值
TreeNode* node = q.front();
printf("%d ", node->val);
// 将左、右子节点分别入队
if (node->left != NULL) {
q.push(node->left);
}
if (node->right != NULL) {
q.push(node->right);
}
// 出队已访问节点
q.pop();
}
}
int main() {
// 创建一个简单的二叉树作为例子
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
printf("Level order traversal of the binary tree is:\n");
levelOrderTraversal(root);
return 0;
}
```
在这个代码中,我们首先定义了一个二叉树节点结构,然后实现了创建新节点的函数。`levelOrderTraversal`函数负责层序遍历,通过队列逐层处理节点。最后,在`main`函数中,我们构建了一个简单的二叉树并调用了`levelOrderTraversal`。
阅读全文