判断完全二叉树c语言
时间: 2023-11-23 14:54:50 浏览: 101
用C语言判断一个二叉树是否为另一个的子结构
可以使用层序遍历的方法来判断一棵二叉树是否为完全二叉树。具体实现可以参考以下C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结点
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 定义队列结点
typedef struct QueueNode {
TreeNode *node;
struct QueueNode *next;
} QueueNode;
// 定义队列
typedef struct Queue {
QueueNode *front;
QueueNode *rear;
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = NULL;
queue->rear = NULL;
}
// 入队
void enqueue(Queue *queue, TreeNode *node) {
QueueNode *newNode = (QueueNode *)malloc(sizeof(QueueNode));
newNode->node = node;
newNode->next = NULL;
if (queue->rear == NULL) {
queue->front = newNode;
queue->rear = newNode;
} else {
queue->rear->next = newNode;
queue->rear = newNode;
}
}
// 出队
TreeNode *dequeue(Queue *queue) {
if (queue->front == NULL) {
return NULL;
}
TreeNode *node = queue->front->node;
QueueNode *temp = queue->front;
queue->front = queue->front->next;
if (queue->front == NULL) {
queue->rear = NULL;
}
free(temp);
return node;}
// 判断是否为完全二叉树
int isCompleteTree(TreeNode *root) {
if (root == NULL) {
return 1;
}
Queue queue;
initQueue(&queue);
enqueue(&queue, root);
int flag = 0;
while (queue.front != NULL) {
TreeNode *node = dequeue(&queue);
if (node == NULL) {
flag = 1;
} else {
if (flag) {
return 0;
}
enqueue(&queue, node->left);
enqueue(&queue, node->right);
}
}
return 1;
}
```
阅读全文