层次序列创建二叉树的c语言代码
时间: 2023-03-20 14:03:18 浏览: 109
以下是使用C语言实现通过层次序列创建二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
//定义二叉树结构体
typedef struct TreeNode{
int data; //节点的数据
struct TreeNode *left; //指向左子树的指针
struct TreeNode *right; //指向右子树的指针
}TreeNode;
//定义队列结构体
typedef struct QueueNode{
TreeNode *node; //指向节点的指针
struct QueueNode *next; //指向下一个节点的指针
}QueueNode;
//初始化队列
QueueNode *initQueue(){
QueueNode *queue = (QueueNode*)malloc(sizeof(QueueNode)); //分配内存
queue->node = NULL; //队列为空
queue->next = NULL; //下一个节点为空
return queue;
}
//入队操作
void enQueue(QueueNode *queue, TreeNode *node){
QueueNode *newNode = (QueueNode*)malloc(sizeof(QueueNode)); //创建新节点
newNode->node = node; //赋值节点
newNode->next = NULL; //下一个节点为空
QueueNode *temp = queue; //指向队首
while(temp->next){ //查找队尾
temp = temp->next;
}
temp->next = newNode; //将新节点加入队尾
}
//出队操作
TreeNode *deQueue(QueueNode *queue){
QueueNode *temp = queue->next; //指向队首
if(temp == NULL){ //队列为空
return NULL;
}
queue->next = temp->next; //将队首指向下一个节点
TreeNode *node = temp->node; //获取队首节点的指针
free(temp); //释放队首节点的内存
return node;
}
//创建二叉树
TreeNode *createTree(int arr[], int size){
if(size <= 0){ //数组为空
return NULL;
}
int i = 0;
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode)); //创建根节点
root->data = arr[i]; //赋值根节点的数据
root->left = NULL; //左子树为空
root->right = NULL; //右子树为空
i++;
QueueNode *queue = initQueue(); //初始化队列
enQueue(queue, root); //将根节点入队
while(i < size){ //遍历数组
TreeNode *node = deQueue(queue); //从队列中取出队首节点
if(node == NULL){ //队列为空
break;
}
//处理左子树
if(arr[i] != -1){ //-1代表空节点
TreeNode *leftNode = (TreeNode*)malloc(sizeof(TreeNode)); //创建左子树节点
leftNode->data = arr[i]; //赋值节点的数据
leftNode->left = NULL; //左子树为空
leftNode->right = NULL; //右子树为空
node->left = leftNode; //将左子树节点连接到父节点
阅读全文