帮我用C语言写一个三阶多叉树的广度优先遍历函数
时间: 2023-06-11 08:07:21 浏览: 106
图的深度、广度优先遍历(c语言)
5星 · 资源好评率100%
好的,以下是一个简单的三阶多叉树的广度优先遍历函数的 C 代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_CHILDREN 3 // 定义每个节点最多有 3 个子节点
// 三叉树节点的结构体定义
typedef struct TreeNode {
int data; // 节点数据
struct TreeNode *children[MAX_CHILDREN]; // 指向子节点的指针数组
} TreeNode;
// 创建一个新节点
TreeNode* new_node(int data) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
for (int i = 0; i < MAX_CHILDREN; i++) {
node->children[i] = NULL;
}
return node;
}
// 广度优先遍历三叉树
void bfs(TreeNode *root) {
if (root == NULL) {
return;
}
// 创建一个队列,用于辅助遍历
TreeNode **queue = (TreeNode**)malloc(sizeof(TreeNode*) * 1000);
int front = 0, rear = 0;
queue[rear++] = root;
while (front < rear) {
TreeNode *node = queue[front++];
printf("%d ", node->data);
for (int i = 0; i < MAX_CHILDREN; i++) {
if (node->children[i] != NULL) {
queue[rear++] = node->children[i];
}
}
}
free(queue);
}
int main() {
// 构建一个三叉树
TreeNode *root = new_node(1);
root->children[0] = new_node(2);
root->children[1] = new_node(3);
root->children[2] = new_node(4);
root->children[0]->children[0] = new_node(5);
root->children[0]->children[1] = new_node(6);
root->children[1]->children[0] = new_node(7);
root->children[1]->children[1] = new_node(8);
root->children[2]->children[0] = new_node(9);
root->children[2]->children[1] = new_node(10);
// 广度优先遍历
bfs(root);
return 0;
}
```
在这个例子中,我们使用了一个 `TreeNode` 结构体表示三叉树的节点,其中包含一个整数数据和一个指向子节点的指针数组。同时,我们使用最简单的数组实现一个队列来辅助遍历。在 `bfs` 函数中,我们首先检查根节点是否为空,然后创建一个队列并将根节点入列。进入循环后,我们从队列中取出一个节点,并输出它的数据。然后,我们将它的所有子节点加入队列。循环继续,直到队列为空为止。
阅读全文