用c语言写一个程序:从键盘输入一个字符序列,构建二叉树b,输出其层次遍历序列,判断b是否为完全二叉树,是则输出YES,不是则输出NO
时间: 2023-06-01 21:06:46 浏览: 150
好的,我可以帮你解决这个问题。
以下是 C 语言的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
// 二叉树的结构体定义
typedef struct TreeNode
{
char val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 队列的结构体定义
typedef struct Queue
{
TreeNode *data[MAXSIZE];
int front, rear;
} Queue;
// 初始化队列
void initQueue(Queue *queue)
{
queue->front = queue->rear = -1;
}
// 判断队列是否为空
int isEmpty(Queue *queue)
{
return queue->front == queue->rear;
}
// 入队操作
void enqueue(Queue *queue, TreeNode *node)
{
queue->rear++;
queue->data[queue->rear] = node;
}
// 出队操作
TreeNode* dequeue(Queue *queue)
{
queue->front++;
return queue->data[queue->front];
}
// 创建二叉树
TreeNode* createTree()
{
char ch;
scanf("%c", &ch);
if (ch == '#') return NULL;
TreeNode *node = (TreeNode*) malloc(sizeof(TreeNode));
node->val = ch;
node->left = createTree();
node->right = createTree();
return node;
}
// 层次遍历二叉树
void levelOrder(TreeNode *root)
{
if (root == NULL) return;
Queue queue;
initQueue(&queue);
enqueue(&queue, root);
while (!isEmpty(&queue))
{
TreeNode *node = dequeue(&queue);
printf("%c ", node->val);
if (node->left != NULL) enqueue(&queue, node->left);
if (node->right != NULL) enqueue(&queue, node->right);
}
}
// 判断二叉树是否为完全二叉树
int isComplete(TreeNode *root)
{
if (root == NULL) return 1;
Queue queue;
initQueue(&queue);
enqueue(&queue, root);
int flag = 0;
while (!isEmpty(&queue))
{
TreeNode *node = dequeue(&queue);
if (node->left != NULL)
{
if (flag == 1) return 0;
enqueue(&queue, node->left);
}
else
{
flag = 1;
}
if (node->right != NULL)
{
if (flag == 1) return 0;
enqueue(&queue, node->right);
}
else
{
flag = 1;
}
}
return 1;
}
int main()
{
TreeNode *root = createTree();
printf("层次遍历二叉树:");
levelOrder(root);
printf("\n");
if (isComplete(root))
{
printf("这是一棵完全二叉树。\n");
}
else
{
printf("这不是一棵完全二叉树。\n");
}
return 0;
}
```
使用上述代码,首先我们需要从键盘输入一个字符序列,此时会自动构建一棵二叉树。接着,程序会输出该二叉树的层次遍历序列,并判断该二叉树是否为完全二叉树,最后输出结果。
希望这个答案能够对你有所帮助。
阅读全文