二叉树的创建并层序输出代码C语言
时间: 2024-04-26 22:05:25 浏览: 74
数据结构层序中序遍历构建二叉树
好的,以下是二叉树的创建并层序输出的代码(C语言):
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 100 // 定义队列的最大长度
// 二叉树结点的结构体
typedef struct TreeNode {
int val; // 结点的值
struct TreeNode *left; // 左子结点
struct TreeNode *right; // 右子结点
}TreeNode;
// 队列的结构体
typedef struct Queue {
TreeNode *data[MAX_QUEUE_SIZE]; // 数据数组
int front; // 队头指针
int rear; // 队尾指针
}Queue;
// 初始化队列
void InitQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int IsFull(Queue *q) {
return (q->rear + 1) % MAX_QUEUE_SIZE == q->front;
}
// 入队操作
void Enqueue(Queue *q, TreeNode *node) {
if(IsFull(q)) {
printf("队列已满,无法入队!\n");
return;
}
q->data[q->rear++] = node; // 将结点插入队尾
q->rear %= MAX_QUEUE_SIZE; // 防止队尾指针越界
}
// 出队操作
TreeNode* Dequeue(Queue *q) {
if(IsEmpty(q)) {
printf("队列为空,无法出队!\n");
return NULL;
}
TreeNode *temp = q->data[q->front++]; // 取出队头结点
q->front %= MAX_QUEUE_SIZE; // 防止队头指针越界
return temp;
}
// 创建二叉树(按层序遍历顺序)
TreeNode* CreateTree(int arr[], int len) {
Queue q;
InitQueue(&q);
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = arr[0];
root->left = root->right = NULL;
Enqueue(&q, root);
int i = 1;
while(i < len) {
TreeNode *temp = Dequeue(&q);
if(i < len) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = arr[i++];
node->left = node->right = NULL;
temp->left = node;
Enqueue(&q, node);
}
if(i < len) {
TreeNode *node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = arr[i++];
node->left = node->right = NULL;
temp->right = node;
Enqueue(&q, node);
}
}
return root;
}
// 层序遍历二叉树
void LevelOrder(TreeNode *root) {
if(!root) return;
Queue q;
InitQueue(&q);
Enqueue(&q, root);
while(!IsEmpty(&q)) {
TreeNode *temp = Dequeue(&q);
printf("%d ", temp->val);
if(temp->left) Enqueue(&q, temp->left);
if(temp->right) Enqueue(&q, temp->right);
}
}
// 测试函数
int main() {
int arr[] = {1,2,3,4,5,6,7,8,9};
int len = sizeof(arr) / sizeof(int);
TreeNode *root = CreateTree(arr, len);
LevelOrder(root);
return 0;
}
```
以上是二叉树的创建并层序输出的代码,希望对您有所帮助!
阅读全文