C++层序生成二叉树的完整主函数
时间: 2024-01-07 20:44:02 浏览: 70
完整版c++二叉树的实现
下面是 C 语言实现二叉树层序生成的完整主函数代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 二叉树节点结构体
typedef struct Node {
TreeNode* data;
struct Node* next;
} Node;
// 队列结构体
typedef struct Queue {
Node* front;
Node* rear;
} Queue;
// 创建一个新的队列节点
Node* createNode(TreeNode* data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 创建一个新的空队列
Queue* createQueue() {
Queue* newQueue = (Queue*)malloc(sizeof(Queue));
newQueue->front = newQueue->rear = NULL;
return newQueue;
}
// 判断队列是否为空
int isQueueEmpty(Queue* queue) {
return queue->front == NULL;
}
// 入队
void enqueue(Queue* queue, TreeNode* data) {
Node* newNode = createNode(data);
if (isQueueEmpty(queue)) {
queue->front = queue->rear = newNode;
return;
}
queue->rear->next = newNode;
queue->rear = newNode;
}
// 出队
TreeNode* dequeue(Queue* queue) {
if (isQueueEmpty(queue)) {
return NULL;
}
Node* frontNode = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
TreeNode* frontData = frontNode->data;
free(frontNode);
return frontData;
}
// 层序生成二叉树
TreeNode* createTree(int arr[], int size, int i) {
if (i >= size || arr[i] == -1) {
return NULL;
}
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = arr[i];
root->left = createTree(arr, size, 2 * i + 1);
root->right = createTree(arr, size, 2 * i + 2);
return root;
}
// 打印二叉树
void printTree(TreeNode* root) {
if (root == NULL) {
return;
}
printf("%d ", root->val);
printTree(root->left);
printTree(root->right);
}
int main() {
int arr[] = { 1, 2, 3, 4, 5, -1, 6, -1, -1, 7 };
int size = sizeof(arr) / sizeof(int);
TreeNode* root = createTree(arr, size, 0);
printf("层序生成的二叉树为:");
printTree(root);
return 0;
}
```
在该代码中,我们首先定义了二叉树结构体 `TreeNode` 和二叉树节点结构体 `Node`,并使用链式队列实现了队列结构体 `Queue`。接着,我们实现了创建一个新的队列节点的函数 `createNode`,创建一个新的空队列的函数 `createQueue`,判断队列是否为空的函数 `isQueueEmpty`,入队函数 `enqueue`,出队函数 `dequeue`,层序生成二叉树的函数 `createTree`,和打印二叉树的函数 `printTree`。最后,我们在 `main` 函数中调用了 `createTree` 函数生成了一个层序生成的二叉树,并使用 `printTree` 函数打印该二叉树。
阅读全文