怎么用c语言写出一个判断二叉树为完全二叉树
时间: 2024-05-14 22:15:52 浏览: 87
首先,需要定义一种数据结构表示二叉树的节点,包括左右子节点的指针以及节点值等信息。然后,使用队列来存储二叉树的节点,按照层序遍历的方式依次将节点加入队列中。在此过程中,如果遇到一个节点的左子节点或右子节点为空,那么应该停止将其子节点压入队列,并且后续遍历到的所有节点都必须是叶子节点。而且,如果在遍历完成后队列中还有节点,那么这个二叉树就不是完全二叉树。如果队列中没有剩余节点,则判定为完全二叉树。以下是代码示例:
```
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
struct Node {
int val;
struct Node *left;
struct Node *right;
};
bool isCompleteBinaryTree(struct Node *root) {
if (root == NULL) {
return true;
}
bool end = false;
struct Node *queue[1000];
int front = 0, rear = 0;
queue[rear++] = root;
while (front < rear) {
struct Node *node = queue[front++];
if (node->left != NULL) {
if (end) {
return false;
}
queue[rear++] = node->left;
}
else {
end = true;
}
if (node->right != NULL) {
if (end) {
return false;
}
queue[rear++] = node->right;
}
else {
end = true;
}
}
return true;
}
int main() {
struct Node *root = (struct Node*) malloc(sizeof(struct Node));
root->val = 1;
root->left = (struct Node*) malloc(sizeof(struct Node));
root->left->val = 2;
root->left->left = (struct Node*) malloc(sizeof(struct Node));
root->left->left->val = 4;
root->left->right = NULL;
root->right = (struct Node*) malloc(sizeof(struct Node));
root->right->val = 3;
root->right->left = NULL;
root->right->right = (struct Node*) malloc(sizeof(struct Node));
root->right->right->val = 5;
if (isCompleteBinaryTree(root)) {
printf("This is a complete binary tree.\n");
}
else {
printf("This is not a complete binary tree.\n");
}
return 0;
}
```
阅读全文