C语言实现完全二叉树
时间: 2023-12-04 08:38:36 浏览: 86
用C语言实现的二叉树
C语言实现完全二叉树需要用到二叉树的基本操作,如节点的创建、插入、删除等。同时,还需要了解完全二叉树的概念和特点,即每个节点都有左右子节点,除了最后一层节点可以不满,其他层节点数都是满的,并且最后一层节点都靠左排列。
具体实现可以参考以下步骤:
1. 定义二叉树节点结构体,包括数据域和左右子节点指针域。
2. 定义完全二叉树结构体,包括根节点指针和节点数。
3. 实现节点的创建、插入和删除操作,其中插入操作需要保证完全二叉树的特性。
4. 实现完全二叉树的遍历操作,包括先序、中序、后序和层次遍历。
以下是一个简单的C语言实现完全二叉树的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef char datatype_bt;
typedef struct btreenode{
datatype_bt data;
struct btreenode *lchild, *rchild;
}btree_node, *btree_pnode;
typedef struct complete_btree{
btree_pnode root;
int count;
}complete_btree, *complete_btree_p;
complete_btree_p create_complete_btree(){
complete_btree_p cbt = (complete_btree_p)malloc(sizeof(complete_btree));
cbt->root = NULL;
cbt->count = 0;
return cbt;
}
void insert_complete_btree(complete_btree_p cbt, datatype_bt data){
btree_pnode node = (btree_pnode)malloc(sizeof(btree_node));
node->data = data;
node->lchild = NULL;
node->rchild = NULL;
if(cbt->root == NULL){
cbt->root = node;
cbt->count++;
return;
}
int count = cbt->count + 1;
int pos = 1;
while(count > 1){
if(count % 2 == 0){
node->rchild = cbt->root;
cbt->root = node;
cbt->count++;
return;
}
else{
pos *= 2;
count /= 2;
}
}
btree_pnode p = cbt->root;
while(pos > 2){
if(pos % 2 == 0){
p = p->lchild;
}
else{
p = p->rchild;
}
pos /= 2;
}
if(pos % 2 == 0){
p->lchild = node;
}
else{
p->rchild = node;
}
cbt->count++;
}
void delete_complete_btree(complete_btree_p cbt, datatype_bt data){
//省略删除操作的实现
}
void pre_order(btree_pnode t){
if(t != NULL){
printf("%c ", t->data);
pre_order(t->lchild);
pre_order(t->rchild);
}
}
void in_order(btree_pnode t){
if(t != NULL){
in_order(t->lchild);
printf("%c ", t->data);
in_order(t->rchild);
}
}
void post_order(btree_pnode t){
if(t != NULL){
post_order(t->lchild);
post_order(t->rchild);
printf("%c ", t->data);
}
}
void level_order(complete_btree_p cbt){
if(cbt->root == NULL){
return;
}
btree_pnode queue[100];
int front = 0, rear = 0;
queue[rear++] = cbt->root;
while(front < rear){
btree_pnode p = queue[front++];
printf("%c ", p->data);
if(p->lchild != NULL){
queue[rear++] = p->lchild;
}
if(p->rchild != NULL){
queue[rear++] = p->rchild;
}
}
}
int main(){
complete_btree_p cbt = create_complete_btree();
insert_complete_btree(cbt, 'A');
insert_complete_btree(cbt, 'B');
insert_complete_btree(cbt, 'C');
insert_complete_btree(cbt, 'D');
insert_complete_btree(cbt, 'E');
insert_complete_btree(cbt, 'F');
printf("Pre-order traversal: ");
pre_order(cbt->root);
printf("\nIn-order traversal: ");
in_order(cbt->root);
printf("\nPost-order traversal: ");
post_order(cbt->root);
printf("\nLevel-order traversal: ");
level_order(cbt);
printf("\n");
return 0;
}
```
阅读全文