#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct TreeNode {
struct TreeNode *left, *right;
char data;
} TreeNode, *pTreeNode;
typedef struct QueueNode {
TreeNode *data;
struct QueueNode *next;
} QueueNode, *pQueueNode;
typedef struct Queue {
pQueueNode front, rear;
} Queue, *pQueue;
TreeNode *createBiTree(TreeNode *root) {
char ch;
scanf("%c", &ch);
if (ch == '.') {
return NULL;
}
root = malloc(sizeof(TreeNode));
root->data = ch;
root->left = createBiTree(root);
root->right = createBiTree(root);
return root;
}
Queue *initQ(Queue *queueNode) {
queueNode->front = (pQueueNode) malloc(sizeof(QueueNode));
if (queueNode->front == NULL)
{
printf("内存分配不成功!");
} else {
queueNode->front->next = NULL;
queueNode->rear = queueNode->front;
return queueNode;
}
}
void enqueue(Queue *queueNode, TreeNode *data) {
QueueNode *newNode = malloc(sizeof(QueueNode));
newNode->data = data;
newNode->next = NULL;
queueNode->rear->next = newNode;
queueNode->rear = newNode;
}
TreeNode *dequeue(Queue *queueNode) {
QueueNode *pTemp = (pQueueNode) malloc(sizeof(QueueNode));
pTemp = queueNode->front->next;
if (pTemp->next == NULL) {
queueNode->rear = queueNode->front;
} else {
queueNode->front->next = pTemp->next;
}
TreeNode *x;
x = pTemp->data;
free(pTemp);
return x;
}
void LevelOrderBiTree(TreeNode *root) {
Queue *queueNode = malloc(sizeof(Queue));
queueNode = initQ(queueNode);
enqueue(queueNode, root);
while (queueNode->rear != queueNode->front) {
TreeNode *x = dequeue(queueNode);
printf("%-2c", x->data);
if (x->left != NULL) {
enqueue(queueNode, x->left);
}
if (x->right != NULL) {
enqueue(queueNode, x->right);
}
}
}
int main() {
TreeNode *root = createBiTree(root);
LevelOrderBiTree(root);
return 0;
}
使用先序遍历输入
层序遍历输出
