C语言完成树的广度遍历(按层遍历)的遍历函数
时间: 2024-08-13 19:03:00 浏览: 44
C语言数据结构之图的遍历实例详解
在C语言中,我们可以使用队列数据结构来实现树的广度优先遍历(Breadth First Search,简称BFS)。以下是创建一个简单的广度优先遍历函数的一个例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建一个新的树节点
TreeNode* createNode(int value) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = value;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 广度优先遍历函数
void bfsTraversal(TreeNode* root) {
if (root == NULL) return; // 如果根节点为空,直接返回
// 创建一个队列并初始化根节点
Queue queue;
initQueue(&queue, root); // 初始化队列,假设已经有一个Queue结构体和对应的操作函数
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);
}
}
// 队列操作函数的示例,这里假设已经有了队列相关的函数如initQueue、enqueue和dequeue等
// 实现具体的队列结构需要你自己提供,这取决于你选择的具体数据结构(如数组、链表等)
int main() {
// 创建一个简单的二叉树实例并调用bfsTraversal进行遍历
// 示例省略,实际应用中你需要构建并传入树的结构
return 0;
}
```
在这个代码片段中,`bfsTraversal`函数首先检查输入的根节点是否为空,然后使用队列存储待访问的节点。每次从队列中取出一个节点,访问它的值,并将其未访问的子节点添加到队列的末尾。这样,就可以按照层次顺序遍历整棵树。
阅读全文